home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / xsw / condis.c < prev    next >
C/C++ Source or Header  |  1995-07-04  |  67KB  |  2,628 lines

  1. /***************************************************************************
  2.  *
  3.  *    Copyright (c) 1990-1993        The Santa Cruz Operation, Inc.
  4.  *
  5.  *    All rights reserved.  No part of this program or publication may be
  6.  *    reproduced, transmitted, transcribed, stored in a retrieval system,
  7.  *    or translated into any language or computer language, in any form or
  8.  *    by any means, electronic, mechanical, magnetic, optical, chemical,
  9.  *    biological, or otherwise, without the prior written permission of:
  10.  *
  11.  *        The Santa Cruz Operation , Inc.        (408) 425-7222
  12.  *        400 Encinal St., Santa Cruz, California 95060 USA
  13.  *
  14.  **************************************************************************/
  15.  
  16. /*
  17.  *    SCCS Stuff
  18.  *        
  19.  *    @(#) condis.c 12.1 95/07/05 SCOINC    
  20.  *
  21.  * S002, 24-Oct-93, rickra
  22.  *     Added 32v5 streams stuff..
  23.  *
  24.  * S001, 15-Sep-93, rickra
  25.  *     Added command line capabilities.
  26.  *     Replaced all read and writes with xsw_read and xsw_writes....
  27.  *     Added disk space stuf..
  28.  *
  29.  * S000, 25-May-93, rickra
  30.  *     Added copyright and modification history
  31. */
  32.  
  33. #include <X11/Xlib.h>
  34. #include <X11/Intrinsic.h>
  35. #include <Xm/Xm.h>
  36. #include <Xm/Protocols.h>
  37. #include <Xm/SelectioB.h>
  38. #include <Xm/DialogS.h>
  39. #include <Xm/MessageB.h>
  40. #include <Xm/Form.h>
  41. #include <Xm/Text.h>
  42. #include <Xm/Label.h>
  43. #include <X11/StringDefs.h>
  44.  
  45. #include "include/unixincs.h"
  46. #include "include/resources.h"
  47. #include "include/buttons.h"
  48. #include "include/xswboth.h"
  49. #include "include/xsw.h"
  50. #include "include/sync.h"
  51. #include "include/sepwin.h"
  52.  
  53. extern struct NetworkXswStruct *current_server;
  54. extern struct NetworkXswStruct *head_server;
  55. extern struct NetworkXswStruct *selected_server;
  56. extern int      server_count;
  57. extern XmString *server_list;
  58. extern Widget   swindow;
  59. extern int      FileDescriptor;
  60. extern Widget   TOGGLE_BUTTONS_WIDGETS[Max_state_buttons];
  61. extern int      configured_port;
  62. extern Widget   sub_menu_state_list[Max_sub_menu_buttons];
  63. extern MyResources res;
  64. extern int      inCommandLineOptionParse;
  65.  
  66. extern int      current_font;
  67.  
  68.  
  69. #define         MAX_SERVERS 50
  70.  
  71. char           *copyselectedItems[MAX_SERVERS];
  72. int            *copyselectedItemsPos[MAX_SERVERS];
  73.  
  74. struct utsname  sysuts;
  75. int             uname_size = 0;
  76. char           *client_name = NULL;
  77. int             got_permission = 0;
  78. int             get_host_result = 0;
  79.  
  80.  
  81. Widget          disconnect_dialog;
  82. Widget          disconnect_scrolled_list;
  83.  
  84. Widget          disconnect_ok_button;
  85. Widget          disconnect_cancel_button;
  86.  
  87. Widget          connect_server_text_widget;
  88. Widget          port_text_widget;
  89. int             disconnect_selected_num = 0;
  90. XmString       *server_list;
  91.  
  92. struct hostent *RemoteHostInfo;
  93. struct sockaddr_in SocketID;
  94.  
  95.  
  96. void
  97.                 destroy_callback (Widget my_widget, DestroyCallbackClientData client_data,
  98.                   XmAnyCallbackStruct cbs);
  99.  
  100. void
  101.                 expose_callback (Widget widget,
  102.                  struct expose_callback_struct *client_data,
  103.                  XmDrawingAreaCallbackStruct * call_data);
  104.  
  105. void
  106.                 input_callback (Widget widget,
  107.                 struct NetworkXswStruct *client_data,
  108.                 XmDrawingAreaCallbackStruct * call_data);
  109.  
  110.  
  111. void
  112. bad_host (w, client_data, call_data)
  113.      Widget          w;
  114.      caddr_t         client_data;
  115.      XmAnyCallbackStruct *call_data;
  116. {
  117.  
  118.   get_host_result = 0;
  119.  
  120. }
  121.  
  122. GetHost (host_name)
  123.      char           *host_name;
  124. {
  125.  
  126.   Arg             args[2];
  127.   int             argcount;
  128.   XmString        message;
  129.   Widget          dialog;
  130.  
  131.   RemoteHostInfo = gethostbyname (host_name);
  132.  
  133.   if (RemoteHostInfo == NULL)
  134.     {
  135.       message = XmStringCreateSimple ("Host name lookup failure");
  136.  
  137.       argcount = 0;
  138.       XtSetArg (args[argcount], XmNmessageString, message);
  139.       argcount++;
  140.       dialog = XmCreateMessageDialog (toplevel, "message", args, argcount);
  141.       XmStringFree (message);
  142.  
  143.       XtAddCallback (dialog, XmNokCallback, bad_host, NULL);
  144.  
  145.       XtUnmanageChild (XmMessageBoxGetChild (dialog, XmDIALOG_HELP_BUTTON));
  146.  
  147.       XtManageChild (dialog);
  148.       get_host_result = 0;
  149.  
  150.     }
  151.   else
  152.     get_host_result = 1;
  153.  
  154. }
  155.  
  156. /***********************************************************************
  157. Connection()
  158.         Here is where the client establishes a connection with the
  159.         server.  In order to do that, we must load the server's info
  160.         info the SocketID structure.  We need 1) The address of the
  161.         remote host (in network byte order) and 2) the port that we
  162.         will bind to on the remote side.  So in order to do this, we
  163.         must have a specific port in mind to go to.  In other words we
  164.         must have predetermined a port that we are going to use for the
  165.         client/server network connection.
  166. ***********************************************************************/
  167. int
  168. Connection ()
  169. {
  170.   int             port;
  171.   struct servent *ServiceNum;
  172.  
  173. /*
  174.   int             optlen, maxseg, sendbuff, recievebuff, no_delay;
  175. */
  176.  
  177.  
  178.  
  179.   /*
  180.    * getservbyname only returns a null pointer on error
  181.    */
  182.  
  183.   port = htons (configured_port);
  184.  
  185.   /*
  186.    * optlen = sizeof(no_delay); no_delay = 1;
  187.    * setsockopt(current_server->FileDescriptor,IPPROTO_TCP,TCP_NODELAY, (char
  188.    * *)&no_delay,sizeof(no_delay));
  189.    * 
  190.    * recievebuff = 100000; sendbuff    = 100000;
  191.    * 
  192.    * setsockopt(current_server->FileDescriptor,SOL_SOCKET,SO_RCVBUF,
  193.    * &recievebuff,sizeof(recievebuff));
  194.    * 
  195.    * setsockopt(current_server->FileDescriptor,SOL_SOCKET,SO_SNDBUF,
  196.    * &sendbuff,sizeof(int));
  197.    */
  198.  
  199.   bzero (&SocketID, sizeof (struct sockaddr_in));
  200.  
  201.   /*
  202.    * This value is ALWAYS the same
  203.    */
  204.  
  205. /*
  206.   fprintf(stdout,"Official host name = %s\n",RemoteHostInfo -> h_name);
  207.   fprintf(stdout,"h_addr = %s\n",RemoteHostInfo -> h_addr_list[0]);
  208.   fprintf(stdout,"Host address type = %d\n",RemoteHostInfo -> h_addrtype);
  209.   fprintf(stdout,"Alias name = %s\n",RemoteHostInfo -> h_aliases);
  210. */
  211.  
  212.   SocketID.sin_family = AF_INET;
  213.  
  214.   bcopy (RemoteHostInfo -> h_addr,
  215.      &SocketID.sin_addr,
  216.      RemoteHostInfo -> h_length);
  217.  
  218. /*
  219.   fprintf(stdout,"Trying %s....\n",inet_ntoa(SocketID.sin_addr));
  220. */
  221.  
  222.   /*
  223.    * Bind to a specific port The port must be in network byte order
  224.    */
  225.  
  226.   SocketID.sin_port = port;
  227.  
  228.   /*
  229.    * Get a TCP socket
  230.    */
  231.  
  232.   FileDescriptor = socket (AF_INET, SOCKTYPE, 0);    /* auto configure */
  233.  
  234.   if (FileDescriptor == -1)
  235.     {
  236.       perror ("Error Creating Socket");
  237.       printf ("Error Number was: %d\n", errno);
  238. #ifdef TESTING
  239.       gct_writelog ("xswLOG");
  240. #endif
  241.       exit (1);
  242.     }
  243.  
  244.   if (connect (FileDescriptor, &SocketID, sizeof (struct sockaddr_in)) < 0)
  245.     {
  246. /*
  247.       fprintf(stdout,"Error from connect, error num = %d\n",errno);
  248. */
  249.       return (0);
  250.     }
  251.  
  252.   return (1);
  253. }                /* end of Connection */
  254.  
  255.  
  256. advise_user_of_broken_connection (server_pointer)
  257.      struct NetworkXswStruct *server_pointer;
  258. {
  259.  
  260.   char            broken_server_message[256];
  261.   XmString        message;
  262.   Widget          dialog;
  263.   Arg             args[5];
  264.   int             argcount;
  265.  
  266.  
  267.  
  268.   sprintf (broken_server_message, "Lost Connection to %s",
  269.        server_pointer -> server_name);
  270.  
  271.   message = XmStringCreateSimple (broken_server_message);
  272.  
  273.   argcount = 0;
  274.   XtSetArg (args[argcount], XmNmessageString, message);
  275.   argcount++;
  276.   dialog = XmCreateMessageDialog (toplevel, "message", args, argcount);
  277.  
  278.   XmStringFree (message);
  279.  
  280.   XtUnmanageChild (XmMessageBoxGetChild (dialog, XmDIALOG_HELP_BUTTON));
  281.  
  282.   XtManageChild (dialog);
  283.  
  284. }
  285.  
  286. remove_server_from_linked_list (server_pointer)
  287.      struct NetworkXswStruct *server_pointer;
  288. {
  289.  
  290.   if (server_pointer == head_server)
  291.     {
  292.       head_server = server_pointer -> forward_link;
  293.  
  294.  
  295.       /*
  296.        * Might  be no more in the list....
  297.        */
  298.  
  299.       if (head_server != NULL)
  300.     head_server -> backward_link = NULL;
  301.     }
  302.   else
  303.     {
  304.       server_pointer -> backward_link -> forward_link =
  305.     server_pointer -> forward_link;
  306.  
  307.       /*
  308.        * Might be the last one in the list.....
  309.        */
  310.  
  311.       if (server_pointer -> forward_link != NULL)
  312.     server_pointer -> forward_link -> backward_link =
  313.       server_pointer -> backward_link;
  314.     }
  315.  
  316. }
  317.  
  318. remove_server_callbacks (server_pointer)
  319.      struct NetworkXswStruct *server_pointer;
  320. {
  321.  
  322.   int             j;
  323.  
  324.   for (j = 0; j < server_pointer -> current_items; j++)
  325.     {
  326.  
  327.       XtRemoveCallback (server_pointer ->
  328.             SEPERATE_WINDOWS_LIST[server_pointer ->
  329.                       DISPLAY_LIST[j].button_num].DrawAreaW,
  330.             XmNresizeCallback, expose_callback,
  331.             server_pointer);
  332.  
  333.       XtRemoveCallback (server_pointer ->
  334.             SEPERATE_WINDOWS_LIST[server_pointer ->
  335.                       DISPLAY_LIST[j].button_num].DrawAreaW,
  336.             XmNexposeCallback, expose_callback,
  337.             server_pointer);
  338.  
  339.       XtRemoveCallback (server_pointer ->
  340.             SEPERATE_WINDOWS_LIST[server_pointer ->
  341.                       DISPLAY_LIST[j].button_num].DrawAreaW,
  342.             XmNinputCallback, input_callback,
  343.             server_pointer);
  344.  
  345. /*
  346.  * Should also remove color help callbacks, but it would mean keeping track
  347.  * of the client data......
  348.  */
  349.  
  350.  
  351.  
  352.  
  353.       /*
  354.        * Also need to remove WMProtocolCallback and free up the client
  355.        * data.....!!
  356.        */
  357.  
  358.       XmRemoveWMProtocolCallback (
  359.            server_pointer -> SEPERATE_WINDOWS_LIST[server_pointer ->
  360.                    DISPLAY_LIST[j].button_num].shell_widget,
  361.            server_pointer -> SEPERATE_WINDOWS_LIST[server_pointer ->
  362.           DISPLAY_LIST[j].button_num].destroy_client_data_pointer ->
  363.                    WM_DELETE_WINDOW, destroy_callback,
  364.      (caddr_t) server_pointer -> SEPERATE_WINDOWS_LIST[server_pointer ->
  365.              DISPLAY_LIST[j].button_num].destroy_client_data_pointer
  366.     );
  367.  
  368.  
  369.       free (server_pointer ->
  370.         SEPERATE_WINDOWS_LIST[server_pointer ->
  371.            DISPLAY_LIST[j].button_num].destroy_client_data_pointer);
  372.  
  373.  
  374.  
  375.     }
  376.  
  377. }
  378.  
  379. destroy_server_windows (server_pointer)
  380.      struct NetworkXswStruct *server_pointer;
  381. {
  382.  
  383.   int             j;
  384.  
  385.   for (j = 0; j < server_pointer -> current_items; j++)
  386.     {
  387.  
  388. #ifdef OLD_WAY
  389.       XtPopdown (
  390.           server_pointer -> SEPERATE_WINDOWS_LIST[
  391.         server_pointer -> DISPLAY_LIST[j].button_num].shell_widget);
  392. #endif
  393.  
  394.       XtDestroyWidget (
  395.             server_pointer -> SEPERATE_WINDOWS_LIST[
  396.         server_pointer -> DISPLAY_LIST[j].button_num].shell_widget);
  397.     }
  398.  
  399. }
  400.  
  401.  
  402. free_server_memory (server_pointer)
  403.      struct NetworkXswStruct *server_pointer;
  404. {
  405.  
  406.   int             j;
  407.  
  408.  
  409.  
  410.   for (j = 0; j < CPU_AVG_MAX; j++)
  411.     {
  412.       free (server_pointer -> cpu_avg[j]);
  413.     }
  414.  
  415.   for (j = 0; j < CPU_AVG_MAX; j++)
  416.     {
  417.       free (server_pointer -> wait_avg[j]);
  418.     }
  419.  
  420.   free (server_pointer -> mynmblock);
  421.   free (server_pointer -> procs);
  422.   free (server_pointer -> oldprocs);
  423.   free (server_pointer -> poldprocs);
  424.   free (server_pointer -> pprocs);
  425.   free (server_pointer -> my_sysinfo);
  426.   free (server_pointer -> my_sysinfo_last);
  427.   free (server_pointer -> my_minfo);
  428.   free (server_pointer -> my_minfo_last);
  429.   free (server_pointer -> my_maxmem);
  430.   free (server_pointer -> my_freemem);
  431.   free (server_pointer -> my_availsmem);
  432.   free (server_pointer -> my_v);
  433.   free (server_pointer -> my_tune);
  434.   free (server_pointer -> mystreams);
  435.  
  436.   if ( server_pointer -> heap_memory_pointer != NULL )
  437.     free (server_pointer -> heap_memory_pointer);
  438.  
  439.   free (server_pointer -> memory_pointer_bak);
  440.  
  441.   free (server_pointer -> ps_mem_sort_mode);
  442.  
  443.   free (server_pointer -> disk_space_sort_mode);
  444.  
  445.  
  446.  
  447.  
  448. /*
  449.  * Free up the pixmap.......
  450.  */
  451.  
  452.   for (j = 0; j < server_pointer -> current_items; j++)
  453.     XFreePixmap (
  454.           server_pointer -> SEPERATE_WINDOWS_LIST[
  455.               server_pointer -> DISPLAY_LIST[j].button_num].display,
  456.           server_pointer -> SEPERATE_WINDOWS_LIST[
  457.               server_pointer -> DISPLAY_LIST[j].button_num].pixmap);
  458.  
  459. /*
  460.  * Free up the widget list for PS MEM
  461.  */
  462.  
  463.   for (j = 0; j < server_pointer -> current_items; j++)
  464.     {
  465.       if (server_pointer -> DISPLAY_LIST[j].button_num == BUTTON_ps_mem)
  466.     {
  467.       free (server_pointer ->
  468.         SEPERATE_WINDOWS_LIST[server_pointer ->
  469.                 DISPLAY_LIST[j].button_num].screen_widget_list);
  470.  
  471.  
  472.       free (server_pointer ->
  473.         SEPERATE_WINDOWS_LIST[server_pointer ->
  474.                  DISPLAY_LIST[j].button_num].toggle_widget);
  475.  
  476.       free (server_pointer ->
  477.         SEPERATE_WINDOWS_LIST[server_pointer ->
  478.                 DISPLAY_LIST[j].button_num].screen_widget_list);
  479.  
  480.       free (server_pointer ->
  481.         SEPERATE_WINDOWS_LIST[server_pointer ->
  482.               DISPLAY_LIST[j].button_num].view_current_sort_widget);
  483.  
  484.       free (server_pointer ->
  485.         SEPERATE_WINDOWS_LIST[server_pointer ->
  486.                 DISPLAY_LIST[j].button_num].view_sort_mode);
  487.  
  488.     }
  489.  
  490.       server_pointer ->
  491.     SEPERATE_WINDOWS_LIST[server_pointer ->
  492.                   DISPLAY_LIST[j].button_num].class_name;
  493.     }
  494.  
  495. }
  496.  
  497. int
  498. create_new_server_list (current_server)
  499.      struct NetworkXswStruct *current_server;
  500.  
  501.  
  502. {
  503.   int             j;
  504.  
  505.   Arg             args[5];
  506.   int             argcount;
  507.  
  508.   struct NetworkXswStruct *temp_server_pointer = NULL;
  509.   int             current_server_position = 0;
  510.  
  511.  
  512.   if (server_list != NULL)
  513.     XtFree (server_list);
  514.  
  515.   server_list = (XmString *) XtMalloc (sizeof (XmString) * server_count);
  516.  
  517.   temp_server_pointer = head_server;
  518.  
  519.   for (j = 0; j < server_count; j++)
  520.     {
  521.  
  522.       if (temp_server_pointer == current_server)
  523.     current_server_position = j + 1;
  524.  
  525.       server_list[j] = XmStringCreate (temp_server_pointer -> server_name,
  526.                        XmSTRING_DEFAULT_CHARSET);
  527.  
  528.       temp_server_pointer = temp_server_pointer -> forward_link;
  529.  
  530.     }
  531.  
  532.   argcount = 0;
  533.   XtSetArg (args[argcount], XmNitems, server_list);
  534.   argcount++;
  535.   XtSetArg (args[argcount], XmNitemCount, server_count);
  536.   argcount++;
  537.   XtSetValues (swindow, args, argcount);
  538.  
  539.   XmListDeselectAllItems (swindow);
  540.  
  541.  
  542.   return (current_server_position);
  543.  
  544.  
  545. }
  546.  
  547. struct NetworkXswStruct *
  548. activate_new_current_server (server_pointer,
  549.                  current_server,
  550.                  current_server_position)
  551.      struct NetworkXswStruct *server_pointer;
  552.      struct NetworkXswStruct *current_server;
  553.      int             current_server_position;
  554.  
  555. {
  556.  
  557.   int             i;
  558.   Arg             args[5];
  559.   int             argcount;
  560.  
  561.  
  562.   if (server_pointer == current_server)
  563.     {
  564.  
  565.       XmListSelectPos (swindow, 1, False);
  566.  
  567.  
  568.       current_server = head_server;
  569.  
  570. /*
  571.  * If there is a server, Update the button states, actual, target and message
  572.  * fields.....
  573.  */
  574.  
  575.       if (current_server != NULL)
  576.  
  577.     {
  578.       for (i = 0; i < Max_state_buttons; i++)
  579.         {
  580.           argcount = 0;
  581.  
  582.           if (current_server -> TOGGLE_BUTTONS_STATE[i] == 1)
  583.         XtSetArg (args[argcount], XmNset, True);
  584.           else
  585.         XtSetArg (args[argcount], XmNset, False);
  586.  
  587.           argcount++;
  588.           XtSetValues (TOGGLE_BUTTONS_WIDGETS[i], args, argcount);
  589.  
  590.         }
  591.  
  592.       display_network_msg (current_server, current_server -> message);
  593.  
  594.       update_StatPeriod (current_server);
  595.       update_StatCycle (current_server);
  596.       update_Users (current_server);
  597.  
  598.     }
  599.       else
  600.     {
  601.       display_network_msg (NULL, "");
  602.       clear_StatPeriod ();
  603.       clear_StatCycle ();
  604.       clear_Users ();
  605.  
  606.       for (i = 0; i < Max_state_buttons; i++)
  607.         toggle_button_reset (NULL, i, NULL);
  608.  
  609.  
  610.     }
  611.  
  612.  
  613.     }
  614.   else
  615.     {
  616.  
  617.       XmListSelectPos (swindow, current_server_position, False);
  618.  
  619.     }
  620.  
  621.   selected_server = current_server;
  622.  
  623.   return (current_server);
  624.  
  625. }
  626.  
  627. void
  628. multi_select_disconnect (w, client_data, call_data)
  629.      Widget          w;
  630.      caddr_t        *client_data;
  631.      XmListCallbackStruct *call_data;
  632. {
  633.   XmString       *selectedItems;
  634.   int            *selectedItemPos;
  635.   int             num_selected = 0;
  636.   int             i;
  637.  
  638.  
  639.   selectedItemPos = call_data -> selected_item_positions;
  640.   selectedItems = call_data -> selected_items;
  641.   num_selected = call_data -> selected_item_count;
  642.  
  643. /* Copy data before it gets wiped out by X */
  644.  
  645.   for (i = 0; i < num_selected; i++)
  646.     {
  647.       copyselectedItems[i] = (char *) cs_to_rs (selectedItems[i]);
  648.       copyselectedItemsPos[i] = (int *) selectedItemPos[i];
  649.     }
  650.  
  651.   disconnect_selected_num = num_selected;
  652.  
  653. }
  654.  
  655.  
  656. void
  657. disconnect_destroy (w, client_data, cbs)
  658.      Widget          w;
  659.      caddr_t        *client_data;
  660.      XmListCallbackStruct *cbs;
  661. {
  662.   XtDestroyWidget (disconnect_dialog);
  663.   disconnect_selected_num = 0;
  664.  
  665. }
  666.  
  667. void
  668. remove_servers (w, client_data, cbs)
  669.      Widget          w;
  670.      caddr_t        *client_data;
  671.      XmSelectionBoxCallbackStruct *cbs;
  672. {
  673.  
  674.   struct NetworkXswStruct *server_pointer = NULL;
  675.   struct NetworkXswStruct *temp_server_pointer = NULL;
  676.   int             temp_data;
  677.   int             i;
  678.   int             k;
  679.   int             j;
  680.   int             current_server_position = 0;
  681.  
  682.   int             servers_found = 0;
  683.  
  684.   Arg             args[5];
  685.   int             argcount;
  686.  
  687.  
  688.  
  689.   if (disconnect_selected_num > 0)
  690.  
  691.     {
  692.  
  693.       argcount = 0;
  694.       XtSetArg (args[argcount], XmNset, False);
  695.       argcount++;
  696.       XtSetValues (sub_menu_state_list[first_font_button +
  697.                        current_server -> current_font],
  698.            args,
  699.            argcount);
  700.  
  701.  
  702. #ifdef DEBUG_SERVER
  703.  
  704.       for (k = 0; k < disconnect_selected_num; k++)
  705.  
  706.     {
  707.       fprintf (stdout, "position %d \n", copyselectedItemsPos[k]);
  708.  
  709.     }
  710. #endif
  711.  
  712.  
  713.  
  714.       for (k = 0; k < disconnect_selected_num; k++)
  715.     {
  716.       server_pointer = head_server;
  717.  
  718. #ifdef DEBUG_SERVER
  719.       fprintf (stdout, "Here we go\n");
  720. #endif
  721.  
  722. /*
  723.  * Increment server_pointer to the proper position.....
  724.  */
  725.  
  726.       for (i = 1; i < ((int) copyselectedItemsPos[k]) - k; i++)
  727.         {
  728. #ifdef DEBUG_SERVER
  729.           fprintf (stdout, "Moving to next server %d %d %d\n", copyselectedItemsPos[k], k, ((int) copyselectedItemsPos[k]) - k);
  730. #endif
  731.           server_pointer = server_pointer -> forward_link;
  732.         }
  733.  
  734.       xsw_write (server_pointer,
  735.              server_pointer -> FileDescriptor,
  736.              send_quitting_data,
  737.              sizeof (int));
  738.  
  739. /*
  740.  * close the socket.....
  741.  */
  742.       close (server_pointer -> FileDescriptor);
  743.  
  744.       remove_server_from_linked_list (server_pointer);
  745.  
  746.       remove_server_callbacks (server_pointer);
  747.  
  748.       XtRemoveTimeOut (server_pointer -> timer_id);
  749.  
  750.       destroy_server_windows (server_pointer);
  751.  
  752.       free_server_memory (server_pointer);
  753.  
  754.  
  755. /*
  756.  * Remove from list...
  757.  */
  758.  
  759.       server_count--;
  760.  
  761.     }
  762.  
  763.  
  764.       current_server_position = create_new_server_list (server_pointer);
  765.  
  766.  
  767.       current_server = activate_new_current_server (server_pointer,
  768.                             current_server,
  769.                             current_server_position);
  770.  
  771.  
  772.       free (server_pointer);
  773.  
  774.       argcount = 0;
  775.       XtSetArg (args[argcount], XmNlistItems, server_list);
  776.       argcount++;
  777.       XtSetArg (args[argcount], XmNlistItemCount, server_count);
  778.       argcount++;
  779.       XtSetValues (disconnect_dialog, args, argcount);
  780.  
  781.  
  782.     }
  783.  
  784.  
  785. /*
  786.  * Turn on the correct font button....
  787.  */
  788.  
  789.  
  790.   if (current_server != NULL)
  791.     {
  792.       argcount = 0;
  793.       XtSetArg (args[argcount], XmNset, True);
  794.       argcount++;
  795.       XtSetValues (sub_menu_state_list[first_font_button +
  796.                        current_server -> current_font],
  797.            args,
  798.            argcount);
  799.  
  800.       current_font = current_server -> current_font;
  801.  
  802.     }
  803.   else
  804.     {
  805.       argcount = 0;
  806.       XtSetArg (args[argcount], XmNset, True);
  807.       argcount++;
  808.       XtSetValues (sub_menu_state_list[first_font_button],
  809.            args,
  810.            argcount);
  811.  
  812.       current_font = 0;
  813.  
  814.     }
  815.  
  816.  
  817.  
  818.   XtDestroyWidget (disconnect_dialog);
  819.  
  820.   disconnect_selected_num = 0;
  821.  
  822. }
  823.  
  824.  
  825. struct NetworkXswStruct *
  826. insert_server (server_name)
  827.      char           *server_name;
  828. {
  829.  
  830.   struct NetworkXswStruct *new_server = NULL;
  831.   struct NetworkXswStruct *viewing_server = NULL;
  832.   int             not_done = 1;
  833.   int             i;
  834.   Arg             args[5];
  835.   int             argcount;
  836.  
  837.  
  838.   server_count++;
  839.   new_server =
  840.     (struct NetworkXswStruct *) calloc (1, sizeof (struct NetworkXswStruct));
  841.  
  842.  
  843.   new_server -> forward_link = NULL;
  844.   new_server -> backward_link = NULL;
  845.   new_server -> server_name = server_name;
  846.  
  847.  
  848.   if (head_server == NULL)
  849.     {
  850.       head_server = new_server;
  851.     }
  852.  
  853.   else
  854.     {
  855.  
  856.       viewing_server = head_server;
  857.  
  858.       while (not_done)
  859.     {
  860.  
  861. /* Determne where to insert the server, alphabetically..... */
  862.  
  863.       if (strcmp (new_server -> server_name, viewing_server -> server_name) < 0)
  864.         {
  865.  
  866.           /* Check to see if we insert at the VERY beginning... */
  867.           if (viewing_server = head_server)
  868.         {
  869.           head_server = new_server;
  870.           new_server -> forward_link = viewing_server;
  871.           viewing_server -> backward_link = new_server;
  872.           not_done = 0;
  873.         }
  874.           else
  875.         {
  876.  
  877.           /* Attach new server */
  878.           new_server -> forward_link = viewing_server;
  879.           new_server -> backward_link = viewing_server -> backward_link;
  880.  
  881.           /* Now, re-attach links properly */
  882.  
  883.           new_server -> backward_link -> forward_link = new_server;
  884.           new_server -> forward_link -> backward_link = new_server;
  885.           not_done = 0;
  886.  
  887.         }
  888.         }
  889.       else
  890.         {
  891.           /* check to see if we are at the end of the linked list */
  892.           if (viewing_server -> forward_link == NULL)
  893.         {
  894.           /* attach to end then.... */
  895.           new_server -> backward_link = viewing_server;
  896.           viewing_server -> forward_link = new_server;
  897.           not_done = 0;
  898.         }
  899.           else
  900.         {
  901.           /* Go to next server */
  902.           viewing_server = viewing_server -> forward_link;
  903.         }
  904.         }
  905.  
  906.     }            /* while (not_done) */
  907.  
  908.     }                /* head_server != NULL */
  909.  
  910.  
  911.   viewing_server = head_server;
  912.  
  913.  
  914.   return (new_server);
  915. }
  916.  
  917.  
  918. initialize_new_server (new_server)
  919.      struct NetworkXswStruct *new_server;
  920. {
  921.  
  922. #define INT_FHEIGHT         (new_server->test_fonts->ascent + new_server->test_fonts->descent)
  923. #define INT_FWIDTH          (new_server->test_fonts->min_bounds.width)
  924.  
  925.  
  926.   int             i;
  927.  
  928. /*
  929.  * Neet to initialize fonts before we use font information for initialization
  930.  * purposes....
  931.  */
  932.  
  933.   init_MyFonts (new_server);
  934.  
  935.   new_server -> current_font = 0;
  936.   new_server -> have_res_font = 0;
  937.   new_server -> font_change = 0;
  938.  
  939.  
  940.   for (i = 0; i < Max_state_buttons; i++)
  941.     {
  942.  
  943.       new_server -> SEPERATE_WINDOWS_LIST[i].already_created = 0;
  944.       new_server -> COMMAND_LIST[i].on = 0;
  945.  
  946.       new_server -> SEPERATE_WINDOWS_LIST[i].max_height = 0;
  947.       new_server -> SEPERATE_WINDOWS_LIST[i].max_width = 0;
  948.       new_server -> SEPERATE_WINDOWS_LIST[i].min_height = 0;
  949.       new_server -> SEPERATE_WINDOWS_LIST[i].min_width = 0;
  950.  
  951.       new_server -> SEPERATE_WINDOWS_LIST[i].pixmap_cur_height = 0;
  952.       new_server -> SEPERATE_WINDOWS_LIST[i].pixmap_cur_height = 0;
  953.  
  954.       new_server -> SEPERATE_WINDOWS_LIST[i].x1 = 0;
  955.       new_server -> SEPERATE_WINDOWS_LIST[i].y1 = 0;
  956.  
  957.       switch (i)
  958.     {
  959.  
  960.     case BUTTON_cpu:
  961.     case BUTTON_wait:
  962.     case BUTTON_mem:
  963.       new_server -> COMMAND_LIST[i].Y_mult = 4;
  964.       new_server -> SEPERATE_WINDOWS_LIST[i].Y_mult = 4;
  965.       new_server -> SEPERATE_WINDOWS_LIST[i].window_type = DRAWING_WINDOW;
  966.  
  967.       new_server -> SEPERATE_WINDOWS_LIST[i].width =
  968.         (INT_FWIDTH * 80);
  969.  
  970.       new_server -> SEPERATE_WINDOWS_LIST[i].height =
  971.         (INT_FHEIGHT * current_server ->
  972.          SEPERATE_WINDOWS_LIST[i].Y_mult);
  973.  
  974.       new_server -> SEPERATE_WINDOWS_LIST[i].draw_width =
  975.         (INT_FWIDTH * 80);
  976.  
  977.       new_server -> SEPERATE_WINDOWS_LIST[i].draw_height =
  978.         (INT_FHEIGHT * current_server ->
  979.          SEPERATE_WINDOWS_LIST[i].Y_mult);
  980.  
  981.       new_server -> SEPERATE_WINDOWS_LIST[i].max_height =
  982.         (INT_FHEIGHT * current_server ->
  983.          SEPERATE_WINDOWS_LIST[i].Y_mult);
  984.  
  985.       new_server -> SEPERATE_WINDOWS_LIST[i].max_width =
  986.         DisplayWidth (display, screen);
  987.  
  988.       new_server -> SEPERATE_WINDOWS_LIST[i].min_height =
  989.         (INT_FHEIGHT * current_server ->
  990.          SEPERATE_WINDOWS_LIST[i].Y_mult);
  991.  
  992.       new_server -> SEPERATE_WINDOWS_LIST[i].min_width = (INT_FWIDTH * 29);
  993.  
  994.       break;
  995.     case BUTTON_other:
  996.       new_server -> COMMAND_LIST[i].Y_mult = 8;
  997.       new_server -> SEPERATE_WINDOWS_LIST[i].Y_mult = 8;
  998.       new_server -> SEPERATE_WINDOWS_LIST[i].window_type = DRAWING_WINDOW;
  999.  
  1000.       new_server -> SEPERATE_WINDOWS_LIST[i].width =
  1001.         (INT_FWIDTH * 80);
  1002.  
  1003.       new_server -> SEPERATE_WINDOWS_LIST[i].height =
  1004.         (INT_FHEIGHT * current_server ->
  1005.          SEPERATE_WINDOWS_LIST[i].Y_mult);
  1006.  
  1007.       new_server -> SEPERATE_WINDOWS_LIST[i].draw_width =
  1008.         (INT_FWIDTH * 80);
  1009.  
  1010.       new_server -> SEPERATE_WINDOWS_LIST[i].draw_height =
  1011.         (INT_FHEIGHT * current_server ->
  1012.          SEPERATE_WINDOWS_LIST[i].Y_mult);
  1013.  
  1014.       new_server -> SEPERATE_WINDOWS_LIST[i].max_height =
  1015.         (INT_FHEIGHT * current_server ->
  1016.          SEPERATE_WINDOWS_LIST[i].Y_mult);
  1017.  
  1018.  
  1019.       new_server -> SEPERATE_WINDOWS_LIST[i].max_width =
  1020.         DisplayWidth (display, screen);
  1021.  
  1022.       new_server -> SEPERATE_WINDOWS_LIST[i].min_height =
  1023.         (INT_FHEIGHT * current_server ->
  1024.          SEPERATE_WINDOWS_LIST[i].Y_mult);
  1025.  
  1026.       new_server -> SEPERATE_WINDOWS_LIST[i].min_width = (INT_FWIDTH * 29);
  1027.       break;
  1028.     case BUTTON_cache:
  1029.       new_server -> COMMAND_LIST[i].Y_mult = 3;
  1030.       new_server -> SEPERATE_WINDOWS_LIST[i].Y_mult = 3;
  1031.       new_server -> SEPERATE_WINDOWS_LIST[i].window_type = DRAWING_WINDOW;
  1032.  
  1033.       new_server -> SEPERATE_WINDOWS_LIST[i].width =
  1034.         (INT_FWIDTH * 80);
  1035.  
  1036.       new_server -> SEPERATE_WINDOWS_LIST[i].height =
  1037.         (INT_FHEIGHT * current_server ->
  1038.          SEPERATE_WINDOWS_LIST[i].Y_mult);
  1039.  
  1040.       new_server -> SEPERATE_WINDOWS_LIST[i].draw_width =
  1041.         (INT_FWIDTH * 80);
  1042.  
  1043.       new_server -> SEPERATE_WINDOWS_LIST[i].draw_height =
  1044.         (INT_FHEIGHT * current_server ->
  1045.          SEPERATE_WINDOWS_LIST[i].Y_mult);
  1046.  
  1047.       new_server -> SEPERATE_WINDOWS_LIST[i].max_height =
  1048.         (INT_FHEIGHT * current_server ->
  1049.          SEPERATE_WINDOWS_LIST[i].Y_mult);
  1050.  
  1051.       new_server -> SEPERATE_WINDOWS_LIST[i].max_width =
  1052.         DisplayWidth (display, screen);
  1053.  
  1054.       new_server -> SEPERATE_WINDOWS_LIST[i].min_height =
  1055.         (INT_FHEIGHT * current_server ->
  1056.          SEPERATE_WINDOWS_LIST[i].Y_mult);
  1057.  
  1058.       new_server -> SEPERATE_WINDOWS_LIST[i].min_width = (INT_FWIDTH * 29);
  1059.       break;
  1060.     case BUTTON_dev_stats:
  1061.       new_server -> COMMAND_LIST[i].Y_mult = 1;
  1062.       new_server -> SEPERATE_WINDOWS_LIST[i].Y_mult = 1;
  1063.       new_server -> SEPERATE_WINDOWS_LIST[i].window_type = DRAWING_WINDOW;
  1064.  
  1065.       new_server -> SEPERATE_WINDOWS_LIST[i].width =
  1066.         (INT_FWIDTH * 80);
  1067.  
  1068.       new_server -> SEPERATE_WINDOWS_LIST[i].height =
  1069.         INT_FHEIGHT * current_server ->
  1070.         SEPERATE_WINDOWS_LIST[i].Y_mult;
  1071.  
  1072.       new_server -> SEPERATE_WINDOWS_LIST[i].draw_width =
  1073.         (INT_FWIDTH * 80);
  1074.  
  1075.       new_server -> SEPERATE_WINDOWS_LIST[i].draw_height =
  1076.         INT_FHEIGHT * current_server ->
  1077.         SEPERATE_WINDOWS_LIST[i].Y_mult;
  1078.  
  1079.  
  1080.       new_server -> SEPERATE_WINDOWS_LIST[i].max_height =
  1081.         (INT_FHEIGHT * current_server ->
  1082.          SEPERATE_WINDOWS_LIST[i].Y_mult);
  1083.  
  1084.       new_server -> SEPERATE_WINDOWS_LIST[i].max_width =
  1085.         (INT_FWIDTH * 80);
  1086.  
  1087.       new_server -> SEPERATE_WINDOWS_LIST[i].min_height =
  1088.         (INT_FHEIGHT * current_server ->
  1089.          SEPERATE_WINDOWS_LIST[i].Y_mult);
  1090.  
  1091.       new_server -> SEPERATE_WINDOWS_LIST[i].min_width =
  1092.         (INT_FWIDTH * 80);
  1093.  
  1094.       break;
  1095.     case BUTTON_streams:
  1096.     case BUTTON_sysinfo:
  1097.  
  1098.       new_server -> SEPERATE_WINDOWS_LIST[i].window_type = DRAWING_WINDOW;
  1099.       new_server -> COMMAND_LIST[i].Y_mult = 15;
  1100.       new_server -> SEPERATE_WINDOWS_LIST[i].Y_mult = 15;
  1101.  
  1102.       new_server -> SEPERATE_WINDOWS_LIST[i].width =
  1103.         (INT_FWIDTH * 80);
  1104.  
  1105.       new_server -> SEPERATE_WINDOWS_LIST[i].height =
  1106.         INT_FHEIGHT * current_server ->
  1107.         SEPERATE_WINDOWS_LIST[i].Y_mult;
  1108.  
  1109.       new_server -> SEPERATE_WINDOWS_LIST[i].draw_width =
  1110.         (INT_FWIDTH * 80);
  1111.  
  1112.       new_server -> SEPERATE_WINDOWS_LIST[i].draw_height =
  1113.         INT_FHEIGHT * current_server ->
  1114.         SEPERATE_WINDOWS_LIST[i].Y_mult;
  1115.  
  1116.  
  1117.       new_server -> SEPERATE_WINDOWS_LIST[i].max_height =
  1118.         (INT_FHEIGHT * current_server ->
  1119.          SEPERATE_WINDOWS_LIST[i].Y_mult);
  1120.  
  1121.       new_server -> SEPERATE_WINDOWS_LIST[i].max_width =
  1122.         (INT_FWIDTH * 80);
  1123.  
  1124.       new_server -> SEPERATE_WINDOWS_LIST[i].min_height =
  1125.         (INT_FHEIGHT * current_server ->
  1126.          SEPERATE_WINDOWS_LIST[i].Y_mult);
  1127.  
  1128.       new_server -> SEPERATE_WINDOWS_LIST[i].min_width =
  1129.         (INT_FWIDTH * 80);
  1130.       break;
  1131.     case BUTTON_tune_var:
  1132.       new_server -> SEPERATE_WINDOWS_LIST[i].window_type = DRAWING_WINDOW;
  1133.       new_server -> COMMAND_LIST[i].Y_mult = 15;
  1134.       new_server -> SEPERATE_WINDOWS_LIST[i].Y_mult = 15;
  1135.  
  1136.  
  1137.       new_server -> SEPERATE_WINDOWS_LIST[i].width =
  1138.         (INT_FWIDTH * 80);
  1139.  
  1140.       new_server -> SEPERATE_WINDOWS_LIST[i].height =
  1141.         INT_FHEIGHT * current_server ->
  1142.         SEPERATE_WINDOWS_LIST[i].Y_mult;
  1143.  
  1144.       new_server -> SEPERATE_WINDOWS_LIST[i].draw_width =
  1145.         (INT_FWIDTH * 80);
  1146.  
  1147.       new_server -> SEPERATE_WINDOWS_LIST[i].draw_height =
  1148.         INT_FHEIGHT * current_server ->
  1149.         SEPERATE_WINDOWS_LIST[i].Y_mult;
  1150.  
  1151.       new_server -> SEPERATE_WINDOWS_LIST[i].max_height =
  1152.         DisplayHeight (display, screen);
  1153.  
  1154.       new_server -> SEPERATE_WINDOWS_LIST[i].max_width =
  1155.         (INT_FWIDTH * 80);
  1156.  
  1157.       new_server -> SEPERATE_WINDOWS_LIST[i].min_height =
  1158.         (INT_FHEIGHT * current_server ->
  1159.          SEPERATE_WINDOWS_LIST[i].Y_mult);
  1160.  
  1161.       new_server -> SEPERATE_WINDOWS_LIST[i].min_width =
  1162.         (INT_FWIDTH * 80);
  1163.  
  1164.       break;
  1165.     case BUTTON_ps_cpu:
  1166.         case BUTTON_ps_io:
  1167.     case BUTTON_disk_space:
  1168.  
  1169.       new_server -> COMMAND_LIST[i].Y_mult = 10;
  1170.       new_server -> SEPERATE_WINDOWS_LIST[i].Y_mult = (DisplayHeight (display, screen) / INT_FHEIGHT) / 2;
  1171.       new_server -> SEPERATE_WINDOWS_LIST[i].window_type = DRAWING_WINDOW;
  1172.       new_server -> SEPERATE_WINDOWS_LIST[i].view_current_sort_widget =
  1173.         (Widget *) calloc (1, sizeof (Widget));
  1174.       new_server -> SEPERATE_WINDOWS_LIST[i].menu_bar = 0;
  1175.  
  1176.       if ( i == BUTTON_disk_space )
  1177.         new_server -> SEPERATE_WINDOWS_LIST[i].width = (INT_FWIDTH * 105);
  1178.       else
  1179.         new_server -> SEPERATE_WINDOWS_LIST[i].width = (INT_FWIDTH * 80);
  1180.  
  1181.       new_server -> SEPERATE_WINDOWS_LIST[i].height =
  1182.         INT_FHEIGHT * 15;
  1183.  
  1184.       new_server -> SEPERATE_WINDOWS_LIST[i].draw_width =
  1185.         DisplayWidth (display, screen);
  1186.  
  1187.       new_server -> SEPERATE_WINDOWS_LIST[i].draw_height =
  1188.         DisplayHeight (display, screen) / 2;
  1189.  
  1190.       new_server -> SEPERATE_WINDOWS_LIST[i].max_height =
  1191.         DisplayHeight (display, screen);
  1192.  
  1193.       new_server -> SEPERATE_WINDOWS_LIST[i].max_width =
  1194.         DisplayWidth (display, screen);
  1195.  
  1196.       new_server -> SEPERATE_WINDOWS_LIST[i].min_height =
  1197.         (INT_FHEIGHT * 2);
  1198.  
  1199.       if ( i == BUTTON_disk_space )
  1200.       new_server -> SEPERATE_WINDOWS_LIST[i].min_width = 0;
  1201. /*
  1202.         (INT_FWIDTH * 80);
  1203. */
  1204.       else
  1205.       new_server -> SEPERATE_WINDOWS_LIST[i].min_width = 0;
  1206. /*
  1207.         (INT_FWIDTH * 80);
  1208. */
  1209.  
  1210.  
  1211.  
  1212.       break;
  1213.     case BUTTON_ps_mem:
  1214.       new_server -> COMMAND_LIST[i].Y_mult = 10;
  1215.       new_server -> SEPERATE_WINDOWS_LIST[i].Y_mult = (DisplayHeight (display, screen) / INT_FHEIGHT) / 2;
  1216.       new_server -> SEPERATE_WINDOWS_LIST[i].window_type = DRAWING_WINDOW;
  1217.       new_server -> SEPERATE_WINDOWS_LIST[i].view_current_sort_widget =
  1218.         (Widget *) calloc (XtNumber (ps_mem_screens), sizeof (Widget));
  1219.       new_server -> SEPERATE_WINDOWS_LIST[i].menu_bar = 0;
  1220.  
  1221.       new_server -> SEPERATE_WINDOWS_LIST[i].width =
  1222.         (INT_FWIDTH * 80);
  1223.       new_server -> SEPERATE_WINDOWS_LIST[i].height =
  1224.         INT_FHEIGHT * 15;
  1225. /*
  1226.               (FHEIGHT * current_server -> max_slots_in_use) +
  1227.               (FHEIGHT * 10);
  1228. */
  1229.       new_server -> SEPERATE_WINDOWS_LIST[i].draw_width =
  1230.         DisplayWidth (display, screen);
  1231.  
  1232.       new_server -> SEPERATE_WINDOWS_LIST[i].draw_height =
  1233.         DisplayHeight (display, screen) / 2;
  1234.  
  1235.       new_server -> SEPERATE_WINDOWS_LIST[i].max_height =
  1236.          DisplayHeight (display, screen);
  1237.  
  1238.       new_server -> SEPERATE_WINDOWS_LIST[i].max_width =
  1239.         DisplayWidth (display, screen);
  1240.  
  1241.       new_server -> SEPERATE_WINDOWS_LIST[i].min_height =
  1242.         (INT_FHEIGHT * 2);
  1243.  
  1244.       new_server -> SEPERATE_WINDOWS_LIST[i].min_width = 0;
  1245. /*
  1246.         (INT_FWIDTH * 80);
  1247. */
  1248.  
  1249.       break;
  1250.  
  1251. #if 0
  1252.     case BUTTON_ps_io:
  1253.       new_server -> COMMAND_LIST[i].Y_mult = 10;
  1254.       new_server -> SEPERATE_WINDOWS_LIST[i].Y_mult = (DisplayHeight (display, screen) / INT_FHEIGHT) / 2;
  1255.       new_server -> SEPERATE_WINDOWS_LIST[i].window_type = DRAWING_WINDOW;
  1256.       new_server -> SEPERATE_WINDOWS_LIST[i].view_current_sort_widget =
  1257.         (Widget *) calloc (1, sizeof (Widget));
  1258.       new_server -> SEPERATE_WINDOWS_LIST[i].menu_bar = 0;
  1259.  
  1260.       new_server -> SEPERATE_WINDOWS_LIST[i].width =
  1261.         (INT_FWIDTH * 80);
  1262.       new_server -> SEPERATE_WINDOWS_LIST[i].height =
  1263.         INT_FHEIGHT * 15;
  1264. /*
  1265.               (FHEIGHT * current_server -> max_slots_in_use) +
  1266.               (FHEIGHT * 10);
  1267. */
  1268.       new_server -> SEPERATE_WINDOWS_LIST[i].draw_width =
  1269.         DisplayWidth (display, screen);
  1270.  
  1271.       new_server -> SEPERATE_WINDOWS_LIST[i].draw_height =
  1272.         DisplayHeight (display, screen);
  1273.  
  1274.  
  1275.       new_server -> SEPERATE_WINDOWS_LIST[i].max_height =
  1276.         DisplayHeight (display, screen);
  1277.  
  1278.       new_server -> SEPERATE_WINDOWS_LIST[i].max_width =
  1279.         DisplayWidth (display, screen);
  1280.  
  1281.       new_server -> SEPERATE_WINDOWS_LIST[i].min_height =
  1282.         (INT_FHEIGHT * 2);
  1283.  
  1284.       new_server -> SEPERATE_WINDOWS_LIST[i].min_width =
  1285.         (INT_FWIDTH * 80);
  1286.  
  1287.       break;
  1288. #endif
  1289.  
  1290.  
  1291.     case BUTTON_nfsstat:
  1292.       new_server -> SEPERATE_WINDOWS_LIST[i].window_type = DRAWING_WINDOW;
  1293.       new_server -> COMMAND_LIST[i].Y_mult = 25;
  1294.       new_server -> SEPERATE_WINDOWS_LIST[i].Y_mult = 25;
  1295.  
  1296.       new_server -> SEPERATE_WINDOWS_LIST[i].width =
  1297.         (INT_FWIDTH * 80);
  1298.  
  1299.       new_server -> SEPERATE_WINDOWS_LIST[i].height =
  1300.         INT_FHEIGHT * current_server ->
  1301.         SEPERATE_WINDOWS_LIST[i].Y_mult;
  1302.  
  1303.       new_server -> SEPERATE_WINDOWS_LIST[i].draw_width =
  1304.         (INT_FWIDTH * 80);
  1305.  
  1306.       new_server -> SEPERATE_WINDOWS_LIST[i].draw_height =
  1307.         INT_FHEIGHT * current_server ->
  1308.         SEPERATE_WINDOWS_LIST[i].Y_mult;
  1309.  
  1310.  
  1311.       new_server -> SEPERATE_WINDOWS_LIST[i].max_height =
  1312.         (INT_FHEIGHT * current_server ->
  1313.          SEPERATE_WINDOWS_LIST[i].Y_mult);
  1314.  
  1315.       new_server -> SEPERATE_WINDOWS_LIST[i].max_width =
  1316.         (INT_FWIDTH * 80);
  1317.  
  1318.       new_server -> SEPERATE_WINDOWS_LIST[i].min_height =
  1319.         (INT_FHEIGHT * current_server ->
  1320.          SEPERATE_WINDOWS_LIST[i].Y_mult);
  1321.  
  1322.       new_server -> SEPERATE_WINDOWS_LIST[i].min_width =
  1323.         (INT_FWIDTH * 80);
  1324.       break;
  1325.     }
  1326.     }
  1327.  
  1328.  
  1329.   new_server -> scroll_bar_expose = 0;
  1330.  
  1331.   new_server -> StatCycle_msec = StatCycle_msecDef;
  1332.   new_server -> StatPeriod_msec = StatCycle_msecDef;
  1333.   new_server -> file_count = 0;
  1334.   new_server -> inode_count = 0;
  1335.   new_server -> proc_count = 0;
  1336.   new_server -> region_count = 0;
  1337.   new_server -> myclist = 0;
  1338.   new_server -> callout_count = 0;
  1339.  
  1340.   new_server -> file_max = 0;
  1341.   new_server -> inode_max = 0;
  1342.   new_server -> proc_max = 0;
  1343.   new_server -> region_max = 0;
  1344.   new_server -> myclist_max = 0;
  1345.   new_server -> callout_max = 0;
  1346.  
  1347.   new_server -> cpu_avg_init = 0;
  1348.   new_server -> wait_avg_init = 0;
  1349.  
  1350. /*
  1351.  * allocate memory for cpu time array averaging buckets
  1352.  */
  1353.   for (i = 0; i < CPU_AVG_MAX; i++)
  1354.     {
  1355.       if (!(new_server -> cpu_avg[i] = (time_t *) calloc (5, sizeof (time_t))))
  1356.     leave_text ("cannot alloc memory for cpu avg arrays", 1);
  1357.     }
  1358.  
  1359. /*
  1360.  * allocate memory for wait time array averaging buckets
  1361.  */
  1362.  
  1363.   for (i = 0; i < WAIT_AVG_MAX; i++)
  1364.     {
  1365.       if (!(new_server -> wait_avg[i] = (time_t *) calloc (3, sizeof (time_t))))
  1366.     leave_text ("cannot alloc memory for wait avg arrays", 1);
  1367.     }
  1368.  
  1369.   new_server -> mynmblock = (int *) calloc (1, sizeof (int));
  1370.   *new_server -> mynmblock = 1;
  1371.  
  1372.   new_server -> got_scsi_disk_stats = 0;
  1373.   new_server -> got_scsi_tape_stats = 0;
  1374.   new_server -> got_scsi_rom_stats = 0;
  1375.   new_server -> got_esdi_disk_stats = 0;
  1376.   new_server -> got_wd_disk_stats = 0;
  1377.   new_server -> got_cart_tape_stats = 0;
  1378.   new_server -> got_floppy_disk_stats = 0;
  1379.  
  1380.  
  1381. /*
  1382.   These four variable are initialize in proc.c . This is because
  1383.   these change constanly.......
  1384. */
  1385.  
  1386.   new_server -> real_procs = NULL;
  1387.   new_server -> start_real_procs = NULL;
  1388.  
  1389.   new_server -> start_my_user = NULL;
  1390.   new_server -> my_user = NULL;
  1391.  
  1392.   new_server -> old_my_user = NULL;
  1393.  
  1394.   new_server -> start_procs = NULL;
  1395.   new_server -> procs = NULL;
  1396.  
  1397.   new_server -> oldprocs = NULL;
  1398.   new_server -> poldprocs = NULL;
  1399.   new_server -> pprocs = NULL;
  1400.  
  1401.   new_server -> nprocs = 0;
  1402.   new_server -> noldprocs = 0;
  1403.  
  1404.   new_server -> boot_time = 0;
  1405.  
  1406.   new_server -> heap_memory_pointer = NULL;
  1407.   new_server -> memory_pointer_bak = NULL;
  1408.  
  1409.   new_server -> new_memory_state = NULL;
  1410.   new_server -> memory_state = NULL;
  1411.  
  1412.   new_server -> procs_alive = 0;
  1413.   new_server -> old_procs_alive = 0;
  1414.  
  1415.   new_server -> slots_in_use = 0;
  1416.   new_server -> old_slots_in_use = 0;
  1417.   new_server -> max_slots_in_use = 0;
  1418.   new_server -> old_max_slots_in_use = 0;
  1419.  
  1420.   new_server -> current_mem_procs = 0;
  1421.   new_server -> current_mem_procs_bak = 0;
  1422.   new_server -> num_active_process = 0;
  1423.   new_server -> got_memory_state = 0;
  1424.  
  1425.  
  1426.   new_server -> FileDescriptor = 0;
  1427.   new_server -> connected = 0;
  1428.  
  1429.   new_server -> nfs_available = 0;
  1430.   new_server -> must_be_32v5 = 0;
  1431.  
  1432.   new_server -> cur_device_displayed = 0;
  1433.   new_server -> max_device_displayed = 0;
  1434.  
  1435.   new_server -> current_disk_space_entries = 0;
  1436.   new_server -> max_disk_space_entries = 0;
  1437.   new_server -> current_disk_space_bak = NULL;
  1438.   new_server -> current_disk_space_entries_bak = 0;
  1439.   new_server -> disk_space_screen_mode = 1;
  1440.   new_server -> show_disk_totals = 1;
  1441.   new_server -> show_nfs = 1;
  1442.  
  1443.  
  1444.   new_server -> disk_space_sort_mode = (int *)
  1445.     calloc (1, sizeof (int) * XtNumber (disk_space_screens));
  1446.  
  1447.   new_server -> disk_space_sort_order = 1;
  1448.  
  1449.   new_server -> disk_space_sort_mode[0] = 0;
  1450.   new_server -> disk_space_sort_mode[1] = 0;
  1451.   new_server -> disk_space_sort_mode[2] = 0;
  1452.  
  1453.   new_server -> current_items = 0;
  1454.  
  1455.   new_server -> user_data_pointer = 0;
  1456.  
  1457.   new_server -> my_sysinfo = (struct sysinfo *)
  1458.     calloc (1, sizeof (struct sysinfo));
  1459.   new_server -> my_sysinfo_last = (struct sysinfo *)
  1460.     calloc (1, sizeof (struct sysinfo));
  1461.  
  1462.   new_server -> my_minfo = (struct minfo *)
  1463.     calloc (1, sizeof (struct minfo));
  1464.   new_server -> my_minfo_last = (struct minfo *)
  1465.     calloc (1, sizeof (struct minfo));
  1466.  
  1467.   new_server -> my_nswap = 0;
  1468.   new_server -> my_maxmem = (int *) calloc (1, sizeof (int));
  1469.  
  1470.   new_server -> my_freemem = (int *) calloc (1, sizeof (int));
  1471.   new_server -> my_availsmem = (int *) calloc (1, sizeof (int));
  1472.   new_server -> my_v = (struct var *) calloc (1, sizeof (struct var));
  1473.   new_server -> my_tune = (struct tune *) calloc (1, sizeof (struct tune));
  1474.   new_server -> my_bootinfo = (struct bootinfo *)
  1475.     calloc (1, sizeof (struct bootinfo));
  1476.  
  1477.   new_server -> configuration_string = NULL;
  1478.  
  1479.  
  1480.   new_server -> mystreams = (struct strstat *)
  1481.     calloc (1, sizeof (struct strstat));
  1482.  
  1483.   new_server -> pagest = (struct pagestat *)
  1484.     calloc (1, sizeof (struct pagestat));
  1485.  
  1486.   new_server -> rbsize = (ushort *)
  1487.     calloc (9, sizeof (ushort));
  1488.  
  1489.   new_server -> Rbsize = (uint *)
  1490.     calloc (15, sizeof (uint));
  1491.  
  1492.  
  1493.   new_server -> send_data_count = 0;
  1494.   new_server -> first_server_read = 0;
  1495.  
  1496.  
  1497.   new_server -> initial_lwrite = 0;
  1498.   new_server -> initial_bwrite = 0;
  1499.   new_server -> initial_lread = 0;
  1500.   new_server -> initial_bread = 0;
  1501.  
  1502.  
  1503.   new_server -> cummulative_memory_used = 0;
  1504.   new_server -> cummulative_swap_used = 0;
  1505.   new_server -> cummulative_avail_swap = 0;
  1506.   new_server -> memory_sample_count = 0;
  1507.  
  1508.   new_server -> ps_procs_to_display = 0;
  1509.  
  1510.  
  1511.   new_server -> ps_cpu_sort_order = 1;
  1512.   new_server -> ps_io_sort_order = 1;
  1513.  
  1514.   new_server -> ps_cpu_time_mode = 1;
  1515.   new_server -> ps_io_time_mode = 1;
  1516.  
  1517.   new_server -> ps_sort_mode = 8;
  1518.   new_server -> ps_display_mode = 12;
  1519.  
  1520.   new_server -> ps_io_sort_mode = 6;
  1521.   new_server -> ps_io_display_mode = 8;
  1522.  
  1523.   new_server -> ps_mem_sort_order = 1; 
  1524.  
  1525.   new_server -> ps_mem_sort_mode = (int *)
  1526.     calloc (1, sizeof (int) * XtNumber (ps_mem_screens));
  1527.  
  1528.   new_server -> ps_mem_sort_mode[0] = 6;
  1529.   new_server -> ps_mem_sort_mode[1] = 7;
  1530.   new_server -> ps_mem_sort_mode[2] = 2;
  1531.   new_server -> ps_mem_sort_mode[3] = 2;
  1532.  
  1533.  
  1534.  
  1535.   new_server -> ps_mem_display_mode = 8;
  1536.  
  1537.   new_server -> ps_mem_screen_mode = 1;
  1538.  
  1539.   new_server -> ps_button_change = 0;
  1540.   new_server -> ps_io_button_change = 0;
  1541.   new_server -> ps_mem_button_change = 0;
  1542.  
  1543.  
  1544.   new_server -> PS_MyButton_decl[0].label = "S";
  1545.   new_server -> PS_MyButton_decl[1].label = "USER";
  1546.   new_server -> PS_MyButton_decl[2].label = "PID";
  1547.   new_server -> PS_MyButton_decl[3].label = "CPU";
  1548.   new_server -> PS_MyButton_decl[4].label = "PRI";
  1549.   new_server -> PS_MyButton_decl[5].label = "NI";
  1550.   new_server -> PS_MyButton_decl[6].label = "UCPU";
  1551.   new_server -> PS_MyButton_decl[7].label = "SCPU";
  1552.   new_server -> PS_MyButton_decl[8].label = "U+S";
  1553.   new_server -> PS_MyButton_decl[9].label = "SIZE";
  1554.   new_server -> PS_MyButton_decl[10].label = "TTY";
  1555.   new_server -> PS_MyButton_decl[11].label = "CMD";
  1556.   new_server -> PS_MyButton_decl[12].label = "CUR";
  1557.   new_server -> PS_MyButton_decl[13].label = "D";
  1558.   new_server -> PS_MyButton_decl[14].label = "%";
  1559.  
  1560.   new_server -> IO_PS_MyButton_decl[0].label = "USER";
  1561.   new_server -> IO_PS_MyButton_decl[1].label = "PID";
  1562.   new_server -> IO_PS_MyButton_decl[2].label = "SWAP";
  1563.   new_server -> IO_PS_MyButton_decl[3].label = "CHAR";
  1564.   new_server -> IO_PS_MyButton_decl[4].label = "READ";
  1565.   new_server -> IO_PS_MyButton_decl[5].label = "WRITE";
  1566.   new_server -> IO_PS_MyButton_decl[6].label = "TOTAL";
  1567.   new_server -> IO_PS_MyButton_decl[7].label = "CMD";
  1568.   new_server -> IO_PS_MyButton_decl[8].label = "CUR";
  1569.   new_server -> IO_PS_MyButton_decl[9].label = "D";
  1570.  
  1571.   new_server -> MEM_PS_MyButton_decl[0].label = "USER";
  1572.   new_server -> MEM_PS_MyButton_decl[1].label = "PID";
  1573.   new_server -> MEM_PS_MyButton_decl[2].label = "VSIZE";
  1574.   new_server -> MEM_PS_MyButton_decl[3].label = "SHRD";
  1575.   new_server -> MEM_PS_MyButton_decl[4].label = "PRIV";
  1576.   new_server -> MEM_PS_MyButton_decl[5].label = "WTD";
  1577.   new_server -> MEM_PS_MyButton_decl[6].label = "TOTAL";
  1578.   new_server -> MEM_PS_MyButton_decl[7].label = "CMD";
  1579.   new_server -> MEM_PS_MyButton_decl[8].label = "D";
  1580.  
  1581.  
  1582. }
  1583.  
  1584. void
  1585. set_up_server (char *text, int result)
  1586. {
  1587.  
  1588.   int             j, i;
  1589.   int             boot_height = 0;
  1590.   int             new_server_position = 0;
  1591.   XmString       *xmstr;
  1592.   Arg             args[9];
  1593.   int             argcount;
  1594.   char           *server_message = "Connected to server ...";
  1595.  
  1596.   struct NetworkXswStruct *new_server = NULL;
  1597.  
  1598.   struct NetworkXswStruct *viewing_server = NULL;
  1599.  
  1600. /* Since we have connection, might as well set current_server to this
  1601.  * new_server . Also, FHEIGHT ,etc reference current_server, and the
  1602.  * initialize_new_server refernces FHEIGHT, FWIDTH,.......
  1603.  */
  1604.  
  1605.  
  1606.  
  1607.   new_server = insert_server (text);
  1608.  
  1609.  
  1610.   current_server = new_server;
  1611.  
  1612.   initialize_new_server (new_server);
  1613.   new_server -> FileDescriptor = FileDescriptor;
  1614.  
  1615.   if (result < 0)
  1616.     new_server -> connected = 0;
  1617.   else
  1618.     new_server -> connected = 1;
  1619.  
  1620. /*
  1621.  * We can use xsw_write/xsw_read now that we have initialize the new
  1622.  * server.....
  1623.  */
  1624.  
  1625.  
  1626.  
  1627.  
  1628.   (void) ftime (&new_server -> timeb_info_read);
  1629.  
  1630.   xsw_write (new_server,
  1631.          new_server -> FileDescriptor,
  1632.          send_os_version_data,
  1633.          sizeof (int));
  1634.  
  1635.   xsw_read (new_server,
  1636.         new_server -> FileDescriptor,
  1637.         &new_server -> os_version,
  1638.         sizeof (int));
  1639.  
  1640.   xsw_write (new_server,
  1641.          new_server -> FileDescriptor,
  1642.          send_user_data,
  1643.          sizeof (int));
  1644.  
  1645.   xsw_read (new_server,
  1646.         new_server -> FileDescriptor,
  1647.         &new_server -> user_data_pointer,
  1648.         sizeof (int));
  1649.  
  1650.   new_server -> memory_sample_count = 1;
  1651.  
  1652.   xsw_write (new_server,
  1653.          new_server -> FileDescriptor,
  1654.          send_nfs_available,
  1655.          sizeof (int));
  1656.  
  1657.   xsw_read (new_server,
  1658.         new_server -> FileDescriptor,
  1659.         &new_server -> nfs_available,
  1660.         sizeof (new_server -> nfs_available));
  1661.  
  1662.   xsw_write (new_server,
  1663.          new_server -> FileDescriptor,
  1664.          send_var_data,
  1665.          sizeof (int));
  1666.  
  1667.   xsw_read (new_server,
  1668.         new_server -> FileDescriptor,
  1669.         new_server -> my_v,
  1670.         sizeof (struct var));
  1671.  
  1672.   xsw_write (new_server,
  1673.          new_server -> FileDescriptor,
  1674.          send_hz_data,
  1675.          sizeof (int));
  1676.  
  1677.   xsw_read (new_server,
  1678.         new_server -> FileDescriptor,
  1679.         &new_server -> hz,
  1680.         sizeof (new_server -> hz));
  1681.  
  1682.   xsw_write (new_server,
  1683.          new_server -> FileDescriptor,
  1684.          send_sysinfo_data,
  1685.          sizeof (int));
  1686.  
  1687.   xsw_read (new_server,
  1688.         new_server -> FileDescriptor,
  1689.         new_server -> my_sysinfo,
  1690.         sizeof (struct sysinfo));
  1691.  
  1692.   xsw_write (new_server,
  1693.          new_server -> FileDescriptor,
  1694.          send_nswap_data,
  1695.          sizeof (int));
  1696.  
  1697.   xsw_read (new_server,
  1698.         new_server -> FileDescriptor,
  1699.         &new_server -> my_nswap,
  1700.         sizeof (int));
  1701.  
  1702.   xsw_write (new_server,
  1703.          new_server -> FileDescriptor,
  1704.          send_availsmem_data,
  1705.          sizeof (int));
  1706.  
  1707.   xsw_read (new_server,
  1708.         new_server -> FileDescriptor,
  1709.         new_server -> my_availsmem,
  1710.         sizeof (int));
  1711.  
  1712.   xsw_write (new_server,
  1713.          new_server -> FileDescriptor,
  1714.          send_freemem_data,
  1715.          sizeof (int));
  1716.  
  1717.   xsw_read (new_server,
  1718.         new_server -> FileDescriptor,
  1719.         new_server -> my_freemem,
  1720.         sizeof (int));
  1721.  
  1722.   xsw_write (new_server,
  1723.          new_server -> FileDescriptor,
  1724.          send_maxmem_data,
  1725.          sizeof (int));
  1726.  
  1727.  
  1728.   xsw_read (new_server,
  1729.         new_server -> FileDescriptor,
  1730.         new_server -> my_maxmem,
  1731.         sizeof (int));
  1732.  
  1733.   xsw_write (new_server,
  1734.          new_server -> FileDescriptor,
  1735.          send_minfo_data,
  1736.          sizeof (int));
  1737.  
  1738.   xsw_read (new_server,
  1739.         new_server -> FileDescriptor,
  1740.         new_server -> my_minfo,
  1741.         sizeof (struct minfo));
  1742.  
  1743.   xsw_write (new_server,
  1744.          new_server -> FileDescriptor,
  1745.          send_tune_data,
  1746.          sizeof (int));
  1747.  
  1748.   xsw_read (new_server,
  1749.         new_server -> FileDescriptor,
  1750.         new_server -> my_tune,
  1751.         sizeof (struct tune));
  1752.  
  1753.   xsw_write (new_server,
  1754.          new_server -> FileDescriptor,
  1755.          send_bootinfo_data,
  1756.          sizeof (int));
  1757.  
  1758.  
  1759.   xsw_read (new_server,
  1760.         new_server -> FileDescriptor,
  1761.         new_server -> my_bootinfo,
  1762.         sizeof (struct bootinfo));
  1763.  
  1764.  
  1765.   xsw_write (new_server,
  1766.          new_server -> FileDescriptor,
  1767.          send_bootstring_data,
  1768.          sizeof (int));
  1769.  
  1770.   xsw_read (new_server,
  1771.         new_server -> FileDescriptor,
  1772.         &new_server -> bootstring,
  1773.         sizeof (new_server -> bootstring)
  1774.     );
  1775.  
  1776.   xsw_read (new_server,
  1777.         new_server -> FileDescriptor,
  1778.         &new_server -> configuration_string_size,
  1779.         sizeof (new_server -> configuration_string_size)
  1780.     );
  1781.  
  1782.   new_server -> configuration_string = (char *)
  1783.     calloc (1, new_server -> configuration_string_size);
  1784.  
  1785.  
  1786.   xsw_read (new_server,
  1787.         new_server -> FileDescriptor,
  1788.         new_server -> configuration_string,
  1789.         new_server -> configuration_string_size
  1790.     );
  1791.  
  1792.   for (j = 0; j < 1024; j++)
  1793.     if (new_server -> configuration_string[j] == 10)
  1794.       boot_height++;
  1795.  
  1796.   new_server -> SEPERATE_WINDOWS_LIST[BUTTON_tune_var].Y_mult =
  1797.     11 + new_server -> my_bootinfo -> memavailcnt +
  1798.     new_server -> my_bootinfo -> memusedcnt + boot_height;
  1799.  
  1800.           new_server -> SEPERATE_WINDOWS_LIST[BUTTON_tune_var].height =
  1801.             INT_FHEIGHT * current_server ->
  1802.             SEPERATE_WINDOWS_LIST[BUTTON_tune_var].Y_mult;
  1803.  
  1804.           new_server -> SEPERATE_WINDOWS_LIST[BUTTON_tune_var].draw_height =
  1805.             INT_FHEIGHT * current_server ->
  1806.             SEPERATE_WINDOWS_LIST[BUTTON_tune_var].Y_mult;
  1807.  
  1808.   xsw_write (new_server,
  1809.          new_server -> FileDescriptor,
  1810.          send_floppy_disk_available,
  1811.          sizeof (int));
  1812.  
  1813.   xsw_read (new_server,
  1814.         new_server -> FileDescriptor,
  1815.         &new_server -> got_floppy_disk_stats,
  1816.         sizeof (int));
  1817.  
  1818.   xsw_write (new_server,
  1819.          new_server -> FileDescriptor,
  1820.          send_scsi_disk_available,
  1821.          sizeof (int));
  1822.  
  1823.   xsw_read (new_server,
  1824.         new_server -> FileDescriptor,
  1825.         &new_server -> got_scsi_disk_stats,
  1826.         sizeof (int));
  1827.  
  1828.   xsw_write (new_server,
  1829.          new_server -> FileDescriptor,
  1830.          send_scsi_tape_available,
  1831.          sizeof (int));
  1832.  
  1833.   xsw_read (new_server,
  1834.         new_server -> FileDescriptor,
  1835.         &new_server -> got_scsi_tape_stats,
  1836.         sizeof (int));
  1837.  
  1838.   xsw_write (new_server,
  1839.          new_server -> FileDescriptor,
  1840.          send_scsi_rom_available,
  1841.          sizeof (int));
  1842.  
  1843.   xsw_read (new_server,
  1844.         new_server -> FileDescriptor,
  1845.         &new_server -> got_scsi_rom_stats,
  1846.         sizeof (int));
  1847.  
  1848.   xsw_write (new_server,
  1849.          new_server -> FileDescriptor,
  1850.          send_esdi_disk_available,
  1851.          sizeof (int));
  1852.  
  1853.   xsw_read (new_server,
  1854.         new_server -> FileDescriptor,
  1855.         &new_server -> got_esdi_disk_stats,
  1856.         sizeof (int));
  1857.  
  1858.   xsw_write (new_server,
  1859.          new_server -> FileDescriptor,
  1860.          send_wd_disk_available,
  1861.          sizeof (int));
  1862.  
  1863.   xsw_read (new_server,
  1864.         new_server -> FileDescriptor,
  1865.         &new_server -> got_wd_disk_stats,
  1866.         sizeof (int));
  1867.  
  1868.   xsw_write (new_server,
  1869.          new_server -> FileDescriptor,
  1870.          send_cart_tape_available,
  1871.          sizeof (int));
  1872.  
  1873.   xsw_read (new_server,
  1874.         new_server -> FileDescriptor,
  1875.         &new_server -> got_cart_tape_stats,
  1876.         sizeof (int));
  1877.  
  1878.   xsw_write (new_server,
  1879.          new_server -> FileDescriptor,
  1880.          send_streams_data,
  1881.          sizeof (int));
  1882.  
  1883.   xsw_read (new_server,
  1884.         new_server -> FileDescriptor,
  1885.         new_server -> mystreams,
  1886.         sizeof (struct strstat));
  1887.  
  1888.   xsw_read (new_server,
  1889.         new_server -> FileDescriptor,
  1890.         new_server -> mynmblock,
  1891.         sizeof (int));
  1892.  
  1893.   if ( new_server -> os_version == 1 )
  1894.     {
  1895.  
  1896.      new_server -> COMMAND_LIST[BUTTON_streams].Y_mult = 21;
  1897.      new_server -> SEPERATE_WINDOWS_LIST[BUTTON_streams].Y_mult = 21;
  1898.  
  1899.  
  1900.      new_server -> SEPERATE_WINDOWS_LIST[BUTTON_streams].height =
  1901.             INT_FHEIGHT * current_server ->
  1902.             SEPERATE_WINDOWS_LIST[BUTTON_streams].Y_mult;
  1903.  
  1904.  
  1905.      new_server -> SEPERATE_WINDOWS_LIST[BUTTON_streams].draw_height =
  1906.             INT_FHEIGHT * current_server ->
  1907.             SEPERATE_WINDOWS_LIST[BUTTON_streams].Y_mult;
  1908.  
  1909.  
  1910.      new_server -> SEPERATE_WINDOWS_LIST[BUTTON_streams].max_height =
  1911.             (INT_FHEIGHT * current_server ->
  1912.              SEPERATE_WINDOWS_LIST[BUTTON_streams].Y_mult);
  1913.  
  1914.      new_server -> SEPERATE_WINDOWS_LIST[BUTTON_streams].min_height =
  1915.             (INT_FHEIGHT * current_server ->
  1916.              SEPERATE_WINDOWS_LIST[BUTTON_streams].Y_mult);
  1917.  
  1918.       xsw_read (new_server,
  1919.             new_server -> FileDescriptor,
  1920.                    new_server -> pagest,
  1921.                    sizeof (struct pagestat));
  1922.  
  1923.       xsw_read (new_server,
  1924.                 new_server -> FileDescriptor,
  1925.                 new_server -> Rbsize,
  1926.                 15 * sizeof(uint));
  1927.  
  1928.      } else
  1929.   if (  new_server-> os_version == 0 )
  1930.     {
  1931.       xsw_read (new_server,
  1932.                   new_server -> FileDescriptor,
  1933.                 new_server -> rbsize,
  1934.                 9 * sizeof(ushort));
  1935.  
  1936.     }
  1937.  
  1938.  
  1939.  
  1940.   if (new_server -> nfs_available)
  1941.     {
  1942.       xsw_write (new_server,
  1943.          new_server -> FileDescriptor,
  1944.          send_nfs_data,
  1945.          sizeof (int));
  1946.  
  1947.       xsw_read (new_server,
  1948.         new_server -> FileDescriptor,
  1949.         &new_server -> rcstat,
  1950.         sizeof (new_server -> rcstat));
  1951.  
  1952.       xsw_read (new_server,
  1953.         new_server -> FileDescriptor,
  1954.         &new_server -> rsstat,
  1955.         sizeof (new_server -> rsstat));
  1956.  
  1957.       xsw_read (new_server,
  1958.         new_server -> FileDescriptor,
  1959.         &new_server -> clstat,
  1960.         sizeof (new_server -> clstat));
  1961.  
  1962.       xsw_read (new_server,
  1963.         new_server -> FileDescriptor,
  1964.         &new_server -> svstat,
  1965.         sizeof (new_server -> svstat));
  1966.  
  1967.     }
  1968.  
  1969.   xsw_write (new_server,
  1970.          new_server -> FileDescriptor,
  1971.          send_files_data,
  1972.          sizeof (int));
  1973.  
  1974.   xsw_read (new_server,
  1975.         new_server -> FileDescriptor,
  1976.         &new_server -> file_count,
  1977.         sizeof (int));
  1978.  
  1979.   xsw_write (new_server,
  1980.          new_server -> FileDescriptor,
  1981.          send_inodes_data,
  1982.          sizeof (int));
  1983.  
  1984.   xsw_read (new_server,
  1985.         new_server -> FileDescriptor,
  1986.         &new_server -> inode_count,
  1987.         sizeof (int));
  1988.  
  1989.   xsw_write (new_server,
  1990.          new_server -> FileDescriptor,
  1991.          send_procs_data,
  1992.          sizeof (int));
  1993.  
  1994.   xsw_read (new_server,
  1995.         new_server -> FileDescriptor,
  1996.         &new_server -> proc_count,
  1997.         sizeof (int));
  1998.  
  1999.   xsw_write (new_server,
  2000.          new_server -> FileDescriptor,
  2001.          send_regions_data,
  2002.          sizeof (int));
  2003.  
  2004.   xsw_read (new_server,
  2005.         new_server -> FileDescriptor,
  2006.         &new_server -> region_count,
  2007.         sizeof (int));
  2008.  
  2009.   xsw_write (new_server,
  2010.          new_server -> FileDescriptor,
  2011.          send_cblocks_data,
  2012.          sizeof (int));
  2013.  
  2014.   xsw_read (new_server,
  2015.         new_server -> FileDescriptor,
  2016.         &new_server -> myclist,
  2017.         sizeof (int));
  2018.  
  2019.   xsw_write (new_server,
  2020.          new_server -> FileDescriptor,
  2021.          send_call_data,
  2022.          sizeof (int));
  2023.  
  2024.   xsw_read (new_server,
  2025.         new_server -> FileDescriptor,
  2026.         &new_server -> callout_count,
  2027.         sizeof (int));
  2028.  
  2029.   xsw_write (new_server,
  2030.          new_server -> FileDescriptor,
  2031.          send_mount_data,
  2032.          sizeof (int));
  2033.  
  2034.   xsw_read (new_server,
  2035.         new_server -> FileDescriptor,
  2036.         &new_server -> mount_count,
  2037.         sizeof (int));
  2038.  
  2039.  
  2040.   xsw_write (new_server,
  2041.          new_server -> FileDescriptor,
  2042.          send_disk_space_data,
  2043.          sizeof (int));
  2044.  
  2045.  
  2046.   xsw_read (new_server,
  2047.         new_server -> FileDescriptor,
  2048.         &new_server -> current_disk_space_entries,
  2049.         sizeof (int));
  2050.  
  2051.  
  2052.   new_server ->current_disk_space = (struct disk_space_struct *)
  2053.     malloc ( new_server -> current_disk_space_entries *
  2054.          sizeof(struct disk_space_struct));
  2055.  
  2056.  
  2057.  
  2058.   xsw_read (new_server,
  2059.         new_server -> FileDescriptor,
  2060.         new_server -> current_disk_space,
  2061.         new_server -> current_disk_space_entries *
  2062.                  sizeof(struct disk_space_struct));
  2063.  
  2064.   new_server -> cummulative_memory_used = *new_server -> my_freemem;
  2065.   new_server -> cummulative_swap_used = new_server -> my_minfo -> freeswap * NBPSCTR / 1024;
  2066.   new_server -> cummulative_avail_swap = *new_server -> my_availsmem * NBPP / 1024;
  2067.   new_server -> memory_sample_count = 1;
  2068.  
  2069.   new_server -> initial_lwrite = new_server -> my_sysinfo -> lwrite;
  2070.   new_server -> initial_bwrite = new_server -> my_sysinfo -> bwrite;
  2071.   new_server -> initial_lread = new_server -> my_sysinfo -> lread;
  2072.   new_server -> initial_lread = new_server -> my_sysinfo -> bread;
  2073.  
  2074.  
  2075.   initialize_Proc (new_server);
  2076.  
  2077.   grok_proc (new_server);
  2078.  
  2079.   save_last_reading (new_server);
  2080.   new_server -> timeb_last_info_read = new_server -> timeb_info_read;
  2081.  
  2082.   (void) memcpy ((char *) new_server -> oldprocs,
  2083.          (char *) new_server -> procs,
  2084.          new_server -> slots_in_use *
  2085.          sizeof (struct my_proc_struct));
  2086.  
  2087.  
  2088.   new_server -> noldprocs = new_server -> nprocs;
  2089.  
  2090.   (void) memcpy ((char *) new_server -> poldprocs,
  2091.          (char *) new_server -> pprocs,
  2092.          new_server -> noldprocs *
  2093.          sizeof (struct my_proc_struct *));
  2094.  
  2095.  
  2096.   set_update_timer (new_server -> StatCycle_msec, new_server);
  2097.  
  2098.  
  2099. /*
  2100.  * Free the server list if it is not NULL, then re-make it according to
  2101.  * our linked list.....
  2102.  */
  2103.  
  2104.   viewing_server = head_server;
  2105.  
  2106.   if (server_list != NULL)
  2107.     XtFree (server_list);
  2108.  
  2109.   server_list = (XmString *) XtMalloc (sizeof (XmString) * server_count);
  2110.   for (i = 0; i < server_count; i++)
  2111.     {
  2112.       server_list[i] = XmStringCreate (viewing_server -> server_name,
  2113.                        XmSTRING_DEFAULT_CHARSET);
  2114.       if (viewing_server == new_server)
  2115.     new_server_position = i;
  2116.  
  2117.  
  2118.       viewing_server = viewing_server -> forward_link;
  2119.     }
  2120.  
  2121.  
  2122. /*
  2123.  * Set the list up.... and Select the new server.....
  2124.  */
  2125.   xmstr = (XmString *) XtMalloc (sizeof (XmString) * 1);
  2126.   xmstr[0] = XmStringCreate (text,
  2127.                  XmSTRING_DEFAULT_CHARSET);
  2128.  
  2129.   selected_server = new_server;
  2130.  
  2131.   argcount = 0;
  2132.   XtSetArg (args[argcount], XmNitems, server_list);
  2133.   argcount++;
  2134.   XtSetArg (args[argcount], XmNitemCount, server_count);
  2135.   argcount++;
  2136.   XtSetValues (swindow, args, argcount);
  2137.  
  2138.   XmListDeselectAllItems (swindow);
  2139.  
  2140.   XmListSelectPos (swindow,
  2141.            new_server_position + 1, False);
  2142.  
  2143.  
  2144.   XtFree (xmstr);
  2145.  
  2146. /*
  2147.  * Now set the new server as the current server and update all the fields...
  2148.  */
  2149.  
  2150.   update_StatPeriod (current_server);
  2151.   update_StatCycle (current_server);
  2152.   update_Users (current_server);
  2153.  
  2154.   for (i = 0; i < Max_state_buttons; i++)
  2155.     {
  2156.       argcount = 0;
  2157.  
  2158.       if (current_server -> TOGGLE_BUTTONS_STATE[i] == 1)
  2159.     XtSetArg (args[argcount], XmNset, True);
  2160.       else
  2161.     XtSetArg (args[argcount], XmNset, False);
  2162.  
  2163.       argcount++;
  2164.       XtSetValues (TOGGLE_BUTTONS_WIDGETS[i], args, argcount);
  2165.  
  2166.     }
  2167.   current_server -> message = server_message;
  2168.   display_network_msg (current_server, current_server -> message);
  2169.  
  2170.  
  2171. }
  2172.  
  2173.  
  2174. void
  2175. CheckSyncAndSecurity (char *text,
  2176.               XmSelectionBoxCallbackStruct * client_data,
  2177.               Widget w)
  2178. {
  2179.  
  2180.   Arg             args[9];
  2181.   int             argcount;
  2182.   int             result;
  2183.   int             sync_read;
  2184.   int             dettache_from_server = send_quitting_data;
  2185.   char            server_not_compatible[256];
  2186.   XmString        message;
  2187.   Widget          dialog;
  2188.   int             continue_server = send_continue;
  2189.  
  2190.  
  2191.   if (!inCommandLineOptionParse)
  2192.     {
  2193.       if ((XmSelectionBoxCallbackStruct *) client_data -> reason == XmCR_OK)
  2194.     XtDestroyWidget (w);
  2195.       else
  2196.     {
  2197.  
  2198.       argcount = 0;
  2199.       XtSetArg (args[argcount], XmNcursorPosition, strlen (""));
  2200.       argcount++;
  2201.       XtSetArg (args[argcount], XmNvalue, "");
  2202.       argcount++;
  2203.       XtSetValues (connect_server_text_widget, args, argcount);
  2204.  
  2205.     }
  2206.     }
  2207.  
  2208. /*
  2209.  * MUST do read without xsw_read, since we have not created the server
  2210.  * space yet....
  2211.  */
  2212.  
  2213.   result = read (FileDescriptor,
  2214.          &sync_read,
  2215.          sizeof (int));
  2216.  
  2217. /*
  2218.  * See if the server and client are in read/write syncronization and that
  2219.  * we got a good result back from the read......
  2220.  */
  2221.  
  2222.   if ((sync_read != sync_number) || (result <= 0))
  2223.     {
  2224. /*
  2225.  * MUST do write without xsw_write, since we have not created the server
  2226.  * space yet.... Really don't care about the result since we are dettaching
  2227.  * from the server.....
  2228.  */
  2229.  
  2230.       if (result > 0)
  2231.     result = write (FileDescriptor,
  2232.             &dettache_from_server,
  2233.             sizeof (int));
  2234.  
  2235. /*
  2236.  * close the socket.....
  2237.  */
  2238.       close (FileDescriptor);
  2239.  
  2240.       if (!inCommandLineOptionParse)
  2241.     {
  2242.       sprintf (server_not_compatible, "Server and Client are NOT COMPATIBLE. Server is version %d. Client is version %d", sync_read,
  2243.            sync_number);
  2244.  
  2245.       message = XmStringCreateSimple (server_not_compatible);
  2246.  
  2247.       argcount = 0;
  2248.       XtSetArg (args[argcount], XmNmessageString, message);
  2249.       argcount++;
  2250.       dialog = XmCreateMessageDialog (toplevel, "message", args, argcount);
  2251.       XmStringFree (message);
  2252.  
  2253.       XtUnmanageChild (XmMessageBoxGetChild (dialog, XmDIALOG_HELP_BUTTON));
  2254.  
  2255.       XtManageChild (dialog);
  2256.  
  2257.     }
  2258.       else
  2259.     fprintf (stdout, "Server and Client are NOT COMPATIBLE. Server is version %d. Client is version %d-> %s\n", text);
  2260.  
  2261.     }
  2262.   else
  2263.     {
  2264.  
  2265.  
  2266. /*
  2267.  * send our uname so that if security is turned on, the server can see if
  2268.  * we have privialges to view the system....
  2269.  */
  2270.  
  2271.       result = write (FileDescriptor,
  2272.               &continue_server,
  2273.               sizeof (int));
  2274.  
  2275.  
  2276.       uname (&sysuts);
  2277.  
  2278.       uname_size = sizeof (struct utsname);
  2279.  
  2280.       result = write (FileDescriptor,
  2281.               &uname_size,
  2282.               sizeof (int));
  2283.  
  2284.       result = write (FileDescriptor,
  2285.               &sysuts,
  2286.               uname_size);
  2287.  
  2288.       result = read (FileDescriptor,
  2289.              &got_permission,
  2290.              sizeof (int));
  2291.  
  2292.       if (got_permission == CLIENT_NOT_OK)
  2293.     {
  2294. /*
  2295.  * close the socket.....
  2296.  */
  2297.       close (FileDescriptor);
  2298.  
  2299.  
  2300.       if (!inCommandLineOptionParse)
  2301.         {
  2302.           sprintf (server_not_compatible, "SERVER HAS DENIED CONNECTION!");
  2303.  
  2304.           message = XmStringCreateSimple (server_not_compatible);
  2305.  
  2306.           argcount = 0;
  2307.           XtSetArg (args[argcount], XmNmessageString, message);
  2308.           argcount++;
  2309.           dialog = XmCreateMessageDialog (toplevel, "message", args, argcount);
  2310.           XmStringFree (message);
  2311.  
  2312.           XtUnmanageChild (XmMessageBoxGetChild (dialog, XmDIALOG_HELP_BUTTON));
  2313.  
  2314.           XtManageChild (dialog);
  2315.  
  2316.         }
  2317.       else
  2318.         fprintf (stdout, "SERVER \"%s\" HAS DENIED CONNECTION!\n", text);
  2319.  
  2320.     }
  2321.       else
  2322.     {
  2323.  
  2324.  
  2325.       set_up_server (text, result);
  2326.  
  2327.       if (inCommandLineOptionParse)
  2328.         GetServerOptions (text, (char *) client_data);
  2329.  
  2330.  
  2331.  
  2332.     }
  2333.     }
  2334.  
  2335. }
  2336.  
  2337. void
  2338. read_server (w, client_data, cbs)
  2339.      Widget          w;
  2340.      caddr_t        *client_data;
  2341.      XmSelectionBoxCallbackStruct *cbs;
  2342. {
  2343.  
  2344.   static int      gathering_data_popup_created = 0;
  2345.   static Widget   information_dialog;
  2346.  
  2347.   XmStringContext context;
  2348.   XmStringCharSet charset;
  2349.   XmStringDirection dir;
  2350.   Boolean         seperator;
  2351.   char           *text;
  2352.  
  2353.   Arg             args[9];
  2354.   int             argcount;
  2355.   XmString        message;
  2356.   Widget          dialog;
  2357.   int             result;
  2358.  
  2359.   char           *port_string;
  2360.  
  2361.  
  2362.   XDefineCursor (XtDisplay (w), XtWindow (w), res.wait_cursor);
  2363.  
  2364.   XmStringInitContext (&context, cbs -> value);
  2365.  
  2366.   XmStringGetNextSegment (context, &text, &charset, &dir, &seperator);
  2367.  
  2368.   GetHost (text);
  2369.  
  2370.   port_string = XmTextGetString (port_text_widget);
  2371.   sscanf (port_string, "%d", &configured_port);
  2372.  
  2373.   XtFree (port_string);
  2374.  
  2375.   if (get_host_result)
  2376.     {
  2377.       if (Connection () == 1)
  2378.     {
  2379.  
  2380.       CheckSyncAndSecurity (text, cbs, w);
  2381.  
  2382.     }
  2383.       else
  2384.     {
  2385.  
  2386.       message = XmStringCreateSimple ("Could NOT CONNECT to server");
  2387.  
  2388.       argcount = 0;
  2389.       XtSetArg (args[argcount], XmNmessageString, message);
  2390.       argcount++;
  2391.       dialog = XmCreateMessageDialog (toplevel, "message", args, argcount);
  2392.       XmStringFree (message);
  2393.  
  2394.       XtUnmanageChild (XmMessageBoxGetChild (dialog, XmDIALOG_HELP_BUTTON));
  2395.  
  2396.       XtManageChild (dialog);
  2397.  
  2398.     }
  2399.     }
  2400.  
  2401.   XmStringFreeContext (context);
  2402.  
  2403.   XDefineCursor (XtDisplay (w), XtWindow (w), res.cursor);
  2404.  
  2405. }
  2406.  
  2407.  
  2408. void
  2409. disconnect_server ()
  2410. {
  2411.  
  2412. /*
  2413.   Widget      cancel_button;
  2414. */
  2415.  
  2416.   Arg             args[32];
  2417.   int             argcount;
  2418.  
  2419.   XmString        message;
  2420.  
  2421.   XmString        selection_label = XmStringCreateSimple ("Servers");
  2422.   Widget          dialog;
  2423.  
  2424.  
  2425.   argcount = 0;
  2426.   XtSetArg (args[argcount], XmNset, False);
  2427.   argcount++;
  2428.   XtSetValues (sub_menu_state_list[BUTTON_disconnect_server], args, argcount);
  2429.  
  2430.   if (server_count > 0)
  2431.     {
  2432.  
  2433.       argcount = 0;
  2434.       XtSetArg (args[argcount], XmNtitle, "Disconnect Servers");
  2435.       argcount++;
  2436.       XtSetArg (args[argcount], XmNlistLabelString, selection_label);
  2437.       argcount++;
  2438.       XtSetArg (args[argcount], XmNselectionPolicy, XmMULTIPLE_SELECT);
  2439.       argcount++;
  2440.       XtSetArg (args[argcount], XmNscrollingPolicy, XmAUTOMATIC);
  2441.       argcount++;
  2442.       XtSetArg (args[argcount], XmNvisibleItemCount, 10);
  2443.       argcount++;
  2444.       XtSetArg (args[argcount], XmNvisual, XmVARIABLE);
  2445.       argcount++;
  2446.       XtSetArg (args[argcount], XmNlistItems, server_list);
  2447.       argcount++;
  2448.       XtSetArg (args[argcount], XmNlistItemCount, server_count);
  2449.       argcount++;
  2450.       disconnect_dialog = XmCreateSelectionDialog (toplevel,
  2451.                            "Server Disconnect List",
  2452.                            args, argcount);
  2453.  
  2454.  
  2455.       XtUnmanageChild (XmSelectionBoxGetChild (disconnect_dialog,
  2456.                            XmDIALOG_HELP_BUTTON));
  2457.       XtUnmanageChild (XmSelectionBoxGetChild (disconnect_dialog,
  2458.                            XmDIALOG_TEXT));
  2459.       XtUnmanageChild (XmSelectionBoxGetChild (disconnect_dialog,
  2460.                            XmDIALOG_SELECTION_LABEL));
  2461.       XtUnmanageChild (XmSelectionBoxGetChild (disconnect_dialog,
  2462.                            XmDIALOG_APPLY_BUTTON));
  2463.  
  2464.       disconnect_scrolled_list = XmSelectionBoxGetChild (disconnect_dialog,
  2465.                              XmDIALOG_LIST);
  2466.  
  2467.       argcount = 0;
  2468.       XtSetArg (args[argcount], XmNselectionPolicy, XmMULTIPLE_SELECT);
  2469.       argcount++;
  2470.       XtSetArg (args[argcount], XmNitems, server_list);
  2471.       argcount++;
  2472.       XtSetArg (args[argcount], XmNitemCount, server_count);
  2473.       argcount++;
  2474.       XtSetValues (disconnect_scrolled_list, args, argcount);
  2475.  
  2476.  
  2477.       XtAddCallback (disconnect_scrolled_list, XmNmultipleSelectionCallback,
  2478.              multi_select_disconnect, NULL);
  2479.  
  2480.       XtAddCallback (disconnect_dialog, XmNcancelCallback,
  2481.              disconnect_destroy, disconnect_dialog);
  2482.  
  2483.       XtAddCallback (disconnect_dialog, XmNokCallback,
  2484.              remove_servers, NULL);
  2485.  
  2486.       XtManageChild (disconnect_dialog);
  2487.  
  2488.  
  2489.     }
  2490.   else
  2491.     {
  2492.       message = XmStringCreateSimple ("No servers to disconnect...");
  2493.  
  2494.       argcount = 0;
  2495.       XtSetArg (args[argcount], XmNmessageString, message);
  2496.       argcount++;
  2497.       dialog = XmCreateMessageDialog (toplevel, "message", args, argcount);
  2498.  
  2499.       XmStringFree (message);
  2500.  
  2501.       XtAddCallback (dialog, XmNokCallback, bad_host, NULL);
  2502.       XtUnmanageChild (XmMessageBoxGetChild (dialog, XmDIALOG_HELP_BUTTON));
  2503.       XtManageChild (dialog);
  2504.  
  2505.  
  2506.     }
  2507.  
  2508. }
  2509.  
  2510. void
  2511. connect_server ()
  2512. {
  2513.  
  2514.   Widget          dialog;
  2515.   Widget          parent_widget;
  2516.   Widget          port_label_widget;
  2517.   Widget          form_widget;
  2518.   Widget          separator_widget;
  2519.   char            port_string[30];
  2520.   struct servent *ServiceNum;
  2521.  
  2522.  
  2523.  
  2524.   Arg             args[32];
  2525.   int             argcount;
  2526.   struct utsname  sysuts;
  2527.  
  2528.  
  2529.   XmString        prompt = XmStringCreateSimple ("Server to connect to:");
  2530.   XmString        port_prompt = XmStringCreateSimple ("Port:");
  2531.   XmString        default_text;
  2532.  
  2533.  
  2534.   uname(&sysuts);
  2535.   default_text  = XmStringCreateSimple (sysuts.nodename);
  2536.  
  2537.   argcount = 0;
  2538.   XtSetArg (args[argcount], XmNset, False);
  2539.   argcount++;
  2540.   XtSetValues (sub_menu_state_list[BUTTON_connect_server], args, argcount);
  2541.  
  2542.  
  2543.  
  2544.   argcount = 0;
  2545.   XtSetArg (args[argcount], XmNtitle, "Server?");
  2546.   argcount++;
  2547.   XtSetArg (args[argcount], XmNtextString, default_text);
  2548.   argcount++;
  2549.   XtSetArg (args[argcount], XmNselectionLabelString, prompt);
  2550.   argcount++;
  2551.   XtSetArg (args[argcount], XmNautoUnmanage, False);
  2552.   argcount++;
  2553.   dialog = XmCreatePromptDialog (toplevel, "Server?", args, argcount);
  2554.   XmStringFree (prompt);
  2555.  
  2556.   XtManageChild (XmSelectionBoxGetChild (dialog, XmDIALOG_APPLY_BUTTON));
  2557.  
  2558.   connect_server_text_widget = XmSelectionBoxGetChild
  2559.     (dialog, XmDIALOG_TEXT);
  2560.  
  2561.  
  2562. /*
  2563.  * Create another label and text widget for PORT information....
  2564.  * Must create a form widget to contain these because the selection box
  2565.  * widget only allows "1" work area widget to be added......
  2566.  */
  2567.  
  2568.   separator_widget = XmSelectionBoxGetChild (dialog, XmDIALOG_SEPARATOR);
  2569.   parent_widget = XtParent (connect_server_text_widget);
  2570.  
  2571.   argcount = 0;
  2572.   XtSetArg (args[argcount], XmNbottomAttachment, XmATTACH_WIDGET);
  2573.   argcount++;
  2574.   XtSetArg (args[argcount], XmNbottomWidget, separator_widget);
  2575.   argcount++;
  2576.   form_widget = XmCreateForm (parent_widget, "port_widget", args, argcount);
  2577.  
  2578.   argcount = 0;
  2579.   XtSetArg (args[argcount], XmNtopAttachment, XmATTACH_FORM);
  2580.   argcount++;
  2581.   port_label_widget = XmCreateLabel (form_widget, "Server port:", args, argcount);
  2582.  
  2583.   argcount = 0;
  2584.   XtSetArg (args[argcount], XmNbottomAttachment, XmATTACH_FORM);
  2585.   argcount++;
  2586.   XtSetArg (args[argcount], XmNtopAttachment, XmATTACH_WIDGET);
  2587.   argcount++;
  2588.   XtSetArg (args[argcount], XmNtopWidget, port_label_widget);
  2589.   argcount++;
  2590.   port_text_widget = XmCreateText (form_widget, "port_widget", args, argcount);
  2591.  
  2592.   if ((ServiceNum = getservbyname (SOCKNAME, PROTOCOL)) == NULL)
  2593.     sprintf (port_string, "%d", XSWPORT);
  2594.   else
  2595.     sprintf (port_string, "%d", ntohs (ServiceNum -> s_port));
  2596.  
  2597.  
  2598.   argcount = 0;
  2599.   XtSetArg (args[argcount], XmNcursorPosition, strlen (port_string));
  2600.   argcount++;
  2601.   XtSetArg (args[argcount], XmNforeground, colorDisplayMsg.pixel);
  2602.   argcount++;
  2603.   XtSetArg (args[argcount], XmNvalue, port_string);
  2604.   argcount++;
  2605.   XtSetValues (port_text_widget, args, argcount);
  2606.  
  2607.   XmTextShowPosition (port_text_widget, strlen (port_string));
  2608.  
  2609.  
  2610.  
  2611.  
  2612.   XtAddCallback (dialog, XmNokCallback, read_server, NULL);
  2613.   XtAddCallback (dialog, XmNapplyCallback, read_server, NULL);
  2614.   XtAddCallback (dialog, XmNcancelCallback, XtDestroyWidget, NULL);
  2615.  
  2616.   XtUnmanageChild (XmSelectionBoxGetChild (dialog, XmDIALOG_HELP_BUTTON));
  2617.  
  2618.   XtManageChild (port_label_widget);
  2619.   XtManageChild (port_text_widget);
  2620.   XtManageChild (form_widget);
  2621.   XtManageChild (dialog);
  2622.  
  2623.   XtPopup (XtParent (dialog), XtGrabNone);
  2624.  
  2625.  
  2626.  
  2627. }
  2628.